【问题标题】:JSF 2.2 ViewAction not decorated with CDI interceptorJSF 2.2 ViewAction 没有用 CDI 拦截器装饰
【发布时间】:2018-05-31 19:33:31
【问题描述】:

我有一个 JSF 视图,其 viewAction 定义如下:

 <f:metadata>
    <f:viewAction action="#{basketBean.onBasketViewPageLoad}" immediate="true"/>
</f:metadata>

调用了 onBasketViewPageLoad 方法,但它没有被定义的 CDI 拦截器修饰。 豆方法

@CalledFromJSFView
public void onBasketViewPageLoad() throws Exception {... }

注释有效,因为它注册在“普通”JSF 动作侦听器等上,这些侦听器被调用。

有谁知道如何获取由 CDI 拦截器修饰的 viewAction。

为了记录,拦截器定义如下:

@InterceptorBinding
@Target({METHOD, TYPE})
@Retention(RUNTIME)
public @interface CalledFromJSFView{
...
}

【问题讨论】:

  • CalledFromJSFView 只是一个绑定,而不是拦截器本身 - 您可能想要显示拦截器本身的代码。另外,您是否在其他情况下尝试过此拦截器?你确定它启用了吗?它是使用@Priority 还是beans.xml 中的条目?

标签: cdi jsf-2.2 interceptor weld


【解决方案1】:

给有同样问题的人。事实证明,这是由于依赖项不匹配造成的。

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

所以我猜是因为版本不兼容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 2016-06-12
    相关资源
    最近更新 更多