将javax.faces.view.viewscope与CDI Springbean和JSF结合使用
我使用的是Spring3.1JSF2.2 使用JSF2.2引入的ViewScope注释Bean不起作用将javax.faces.view.viewscope与CDI Springbean和JSF结合使用,spring,jsf,jsf-2,cdi,jsf-2.2,Spring,Jsf,Jsf 2,Cdi,Jsf 2.2,我使用的是Spring3.1JSF2.2 使用JSF2.2引入的ViewScope注释Bean不起作用 @javax.inject.Named @javax.faces.view.ViewScoped public class TestBean { @PostConstruct public void init(){sysout("Why spring invoke this when initializing context :-( ");} } 在my applicatio
@javax.inject.Named
@javax.faces.view.ViewScoped
public class TestBean {
@PostConstruct
public void init(){sysout("Why spring invoke this when initializing context :-( ");}
}
在my applicationContext.xml中,有一个注释组件扫描标记
<context:component-scan base-package="com.test"/>
Spring3.1检测并处理CDI注释,但@javax.faces.view.ViewScoped不起作用。通过创建我自己的ViewScope实现,我知道这一点,但我想知道为什么@javax.faces.view.ViewScoped不起作用javax.faces.view.ViewScoped只适用于JSF托管Bean,而不适用于CDI 如果希望在视图范围内而不是在javax.inject.Named中有正确的行为,请使用javax.faces.bean.ManagedBean注释
关于最好的解决方案是删除spring并使用CDI的JavaEE实现您应该注意,JSF注释对SpringBean不起作用,因为JSFBean位于不同的上下文中 但是视图范围的实现非常简单。我已经创建了一个工件来解决这个问题
查看我的github存储库。为什么您认为spring调用
@PostConstruct
?此代码中未使用Spring。请详细解释一下你的问题。需要一个。您将javax.faces.view.ViewScoped
与javax.faces.bean.ViewScoped
混淆。也许您还需要赶上JSF2.2的新特性?