JSF 2.2 ViewAction没有用CDI拦截器修饰

问题描述 投票:1回答:1

我有一个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{
...
}
cdi jsf-2.2 interceptor weld
1个回答
0
投票

对任何有同样问题的人。事实证明,这是由于依赖项中的不匹配。

当它不起作用我使用(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'

所以我猜这是由于版本不兼容。

© www.soinside.com 2019 - 2024. All rights reserved.