3

私はJSF-2とCDIを初めて使用します(私はSpring worldの出身です)。

@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)呼び出されません。

4

1 に答える 1

9

Java EEインターセプターは、CDI管理対象のBeanとEJBでのみ機能し、JSF管理対象のBeanでは機能しません。

したがって、基本的に2つのオプションがあります。

  1. CDI Bean管理アノテーション(@Namedet.al.)によるJSFBean管理アノテーションの変更

  2. 代わりに、JSFマネージドBeanによって呼び出されるEJBメソッドをインターセプトします。正気のJavaEEアプリケーションでは、実際のビジネスロジックはとにかくEJBに属します。

于 2013-03-25T14:03:18.633 に答える