使用带有CDI Spring bean和JSF的javax.faces.view.ViewScoped

时间:2013-08-12 00:20:45

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

我正在使用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不起作用

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:-1)

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

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

请参阅我的github javaplugs/spring-jsf存储库。

答案 2 :(得分:-2)

javax.faces.view.ViewScoped仅适用于JSF Managed Bean而不适用于CDI。

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

此致