首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能从@ManagedBean拦截一种方法?如果没有,还有其他选择吗?

是否有可能从@ManagedBean拦截一种方法?如果没有,还有其他选择吗?
EN

Stack Overflow用户
提问于 2013-03-25 13:56:33
回答 1查看 3.4K关注 0票数 3

我刚接触过JSF-2和CDI (我来自Spring世界)。

我想从@ManagedBean中拦截一个方法,但是我的Interceptor类从未被调用过。做得到吗?

LogInterceptor.java

代码语言:javascript
复制
@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

代码语言:javascript
复制
@ManagedBean
@ViewScoped
public class RoleMB extends BaseMB {

    @Interceptors(LogInterceptor.class)
    public void preEditRole(Role role) {
        ...
    }
}

beans.xml

代码语言:javascript
复制
<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)从未被调用过。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-25 14:03:18

Java拦截器只在CDI托管bean和EJB上工作,而不是在JSF托管bean上工作。

所以,你基本上有两个选择:

  1. 通过CDI管理注释(@Named et.al)更改JSF管理注释。
  2. 拦截EJB方法,然后由JSF托管bean调用该方法。在一个正常的Java应用程序中,真正的业务逻辑无论如何都属于EJB。
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15616763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档