需求是在JSF中需要对managebean的方法进行拦截,首先jsf本身没找到支持的方式,和spring集成的话,貌似managebean可能用spring来管理,但是这个没找到切却的方式,最好找到使用CDI beans来替代managebean,然后对bean的方法进行拦截。
[b]版本要求:[/b]jsf2.2,j2ee6,好像tomcat7才支持cdi,或者weblogic,websphere之类,这些具体还没验证.
代码:
一、bean上原来使用@ManagedBean的地方替换为@Named
对需要拦截的方法加上注解
二、实现拦截类
这样,页面上调用getSomething时,会进去到拦截的方法中,ctx里面可以获取到具体拦截的方法等信息
[b]版本要求:[/b]jsf2.2,j2ee6,好像tomcat7才支持cdi,或者weblogic,websphere之类,这些具体还没验证.
代码:
一、bean上原来使用@ManagedBean的地方替换为@Named
对需要拦截的方法加上注解
import javax.inject.Named;
@Named
...
@Interceptors(HelloInterceptor. class)
public void getSomething() {
}
二、实现拦截类
public class HelloInterceptor {
@AroundInvoke
public Object hello(InvocationContext ctx) throws Exception {
System.out.println( "AroundInvoke");
try {
return ctx.proceed();
} catch (Exception e) {
System.out.println( "Error calling ctx.proceed in hello()");
return null;
}
}
}
这样,页面上调用getSomething时,会进去到拦截的方法中,ctx里面可以获取到具体拦截的方法等信息