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和更新。什麼即時做錯了?
請添加您的導入..是'PerguntaController' CDI bean還是JSF Managed Bean? – 2015-02-24 23:44:45
這是一個CDI Bean。我正在使用glassfish。 – ulima69 2015-02-25 16:20:49
GlassFish的哪個版本? – 2015-02-25 22:06:58