我刚接触过JSF-2和CDI (我来自Spring世界)。
我想从@ManagedBean中拦截一个方法,但是我的Interceptor类从未被调用过。做得到吗?
LogInterceptor.java
@Interceptor
public class LogInterceptor {
@AroundInvoke
public Object log(InvocationContext ctx) throws Exception {
System.out.println("begin method interceptor");
Object methodReturn = ctx.proceed();
System.out.println("end method interceptor");
return methodReturn;
}
}RoleMB
@ManagedBean
@ViewScoped
public class RoleMB extends BaseMB {
@Interceptors(LogInterceptor.class)
public void preEditRole(Role role) {
...
}
}beans.xml
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
<interceptors>
<class>br.com.preventsenior.services.log.LogInterceptor</class>
</interceptors>
</beans>log(InvocationContext ctx)从未被调用过。
发布于 2013-03-25 14:03:18
Java拦截器只在CDI托管bean和EJB上工作,而不是在JSF托管bean上工作。
所以,你基本上有两个选择:
@Named et.al)更改JSF管理注释。https://stackoverflow.com/questions/15616763
复制相似问题