2 回答
TA贡献1725条经验 获得超7个赞
您使用了错误的@SessionScoped注释。
如果您已使用JSF @ManagedBean批注注册了bean ,则需要@SessionScoped从JSF(javax.faces)包中导入,如下所示:
import javax.faces.bean.SessionScoped;
当您在JSF托管Bean上错误地使用CDI范围时,则JSF托管Bean实际上没有JSF范围,它会退回到其默认值@RequestScoped,即在每个HTTP请求中创建一个新实例。
如果您已使用CDI @Named批注注册了bean ,则需要@SessionScoped从CDI(javax.enterprise.context)包中导入,如下所示:
import javax.enterprise.context.SessionScoped;
当您在CDI托管Bean上错误地使用JSF范围时,那么CDI托管Bean实际上就没有CDI范围,它会退回到其默认@Dependent范围,从而在每个EL表达式中创建一个新实例。
TA贡献1831条经验 获得超9个赞
是的,我不时睡觉。CDI是基于注释的依赖项注入框架,可以与除JSF之外的任何其他框架结合使用。就像早在J2EE时代的春天一样。但是,并不总是建议在一个项目中混合使用JSF和CDI批注。使用JSF或CDI。因此,请使用JSF @ManagedBean @SessionScoped
或CDI @Names @SessionScoped
。CDI具有imo,但是在JSF Web应用程序中有一个主要缺点,它没有提供JSF“视图范围”的注释(可通过获得)@ViewScoped
。
添加回答
举报