2015-02-24 84 views
0

为什么我的拦截器不起作用?JSF拦截器不会触发

MyLog.java

@Inherited 
@InterceptorBinding 
@Retention(RUNTIME) 
@Target({METHOD, TYPE}) 
public @interface MyLog { 
} 

MyLogger.java

@Interceptor 
@MyLog 
@Priority(Interceptor.Priority.APPLICATION) 
public class MyLogger { 
    @AroundInvoke 
    public Object log(InvocationContext context) throws Exception{ 
     System.out.println("begin " + context.getMethod().getName()); 
     Object obj = context.proceed(); 
     System.out.println("end " + context.getMethod().getName()); 
     return obj; 
    } 
} 

PerguntaController.java

import interceptor.MyLog; 
import java.io.Serializable; 
import java.util.List; 
import javax.ejb.EJB; 
import javax.ejb.EJBException; 
import javax.inject.Named; 
import javax.enterprise.context.SessionScoped; 
@Named("PerguntaController") 
@SessionScoped 
public class PerguntaController implements Serializable { 

    @EJB 
    private PerguntaFacade ejbFacade; 

    @MyLog 
    public List<> getAll() { 
     return ejbFacade.getAll(); 
    } 

    @MyLog 
    public void update(Pergunta pergunta) { 
     ejbFacade.update(pergunta); 
    } 
} 

PerguntaFacade.java

import interceptor.MyLog; 
import java.util.List; 
import javax.ejb.Stateless; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
@Stateless 
public class PerguntaFacade { 
    @PersistenceContext(unitName = "WebApplicationPU") 
    private EntityManager em; 

    @MyLog 
    public List<Pergunta> getAll() { 
     return em.createQuery("SELECT p FROM Pergunta p", Pergunta.class).getResultList(); 
    } 

    @MyLog 
    public void update(Pergunta pergunta) { 
     //do something 
    } 
} 

当JSF页面使用GETALL和更新(从PerguntaController)不会触发PerguntaFacade拦截既不GETALL和更新。什么即时做错了?

+0

请添加您的导入..是'PerguntaController' CDI bean还是JSF Managed Bean? – 2015-02-24 23:44:45

+0

这是一个CDI Bean。我正在使用glassfish。 – ulima69 2015-02-25 16:20:49

+0

GlassFish的哪个版本? – 2015-02-25 22:06:58

回答

0

已解决。

beans.xmlbean-discovery-mode="annotated"不起作用。 然后更改为bean-discovery-mode="all"并正常工作。