我有一个JSF视图,其viewAction定义如下:
<f:metadata>
<f:viewAction action="#{basketBean.onBasketViewPageLoad}" immediate="true"/>
</f:metadata>
调用onBasketViewPageLoad方法,但它不是由定义的CDI拦截器修饰的。豆方法
@CalledFromJSFView
public void onBasketViewPageLoad() throws Exception {... }
注释有效,因为它是在“普通”JSF动作侦听器等上注册的,它们被调用。
有谁知道如何获得由CDI拦截器装饰的viewActions。
对于记录,拦截器定义如下:
@InterceptorBinding
@Target({METHOD, TYPE})
@Retention(RUNTIME)
public @interface CalledFromJSFView{
...
}
对任何有同样问题的人。事实证明,这是由于依赖项中的不匹配。
当它不起作用我使用(gradle依赖)
compile 'javax.faces:javax.faces-api:2.2';
compile (group: 'com.sun.faces', name: 'jsf-impl', version: '2.2.0')
compile group: 'org.jboss.weld.servlet', name: 'weld-servlet', version: '2.4.6.Final'
当它工作时,javax.faces更新为com.sun.faces。
像这样:
compile 'com.sun.faces:jsf-api:2.2.15'
compile (group: 'com.sun.faces', name: 'jsf-impl', version: '2.2.15'
compile group: 'org.jboss.weld.servlet', name: 'weld-servlet', version: '2.4.6.Final'
所以我猜这是由于版本不兼容。