【问题标题】:use javax.faces.view.ViewScoped with CDI Spring bean and JSF将 javax.faces.view.ViewScoped 与 CDI Spring bean 和 JSF 一起使用
【发布时间】:2013-08-12 00:20:45
【问题描述】:

我正在使用 Spring 3.1 JSF 2.2。

使用 JSF 2.2 引入的 ViewScoped 注释 Bean 不起作用。

@javax.inject.Named
@javax.faces.view.ViewScoped
public class TestBean {
    @PostConstruct
    public void init(){sysout("Why spring invoke this when initializing context :-( ");}
}

在我的applicationContext.xml中有一个注解组件扫描标签

<context:component-scan base-package="com.test"/> 

Spring 3.1 检测并处理 CDI 注释,但 @javax.faces.view.ViewScoped 不起作用。我知道有 another solution 通过创建我自己的 ViewScoped 实现,但我想知道为什么 @javax.faces.view.ViewScoped 不起作用

【问题讨论】:

  • 为什么你认为 spring 调用 @PostConstruct ?您没有在此代码中使用 Spring。请详细说明您的问题。需要sscce

标签: spring jsf jsf-2 cdi jsf-2.2


【解决方案1】:

最好的解决方案是移除 spring 并使用 CDI 的 Java EE 实现

【讨论】:

    【解决方案2】:

    您应该注意到 JSF 注释不适用于 Spring bean,因为 JSF bean 位于不同的上下文中。

    但是视图范围的实现非常简单。我已经创建了一个工件来解决这个问题。

    查看我的 github javaplugs/spring-jsf 存储库。

    【讨论】:

      【解决方案3】:

      javax.faces.view.ViewScoped 仅适用于 JSF 托管 Bean,不适用于 CDI。

      如果您希望使用 View 范围而不是 javax.inject.Named 获得正确的行为,请使用 javax.faces.bean.ManagedBean 注释。

      问候

      【讨论】:

      • 您将javax.faces.view.ViewScopedjavax.faces.bean.ViewScoped 混淆了。也许您需要赶上新的 JSF 2.2 特性了吗? jdevelopment.nl/jsf-22
      猜你喜欢
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 2015-04-15
      • 2012-12-30
      • 2013-08-20
      • 2016-04-19
      • 2016-08-02
      • 2012-07-23
      相关资源
      最近更新 更多