我目前正在将一个项目从 JBoss 4.2.2 迁移到 JBoss 6.0.0,并且还使用 CDI 添加依赖项注入(inject),并从 JSF 1.2 迁移到 JSF 2.0。我向 ejb 包和 war 包中添加了 beans.xml 文件。
现在我有一个使用托管 bean LoginBean.java
的 xhtml 页面。这些 beans 已在 faces-config.xml 中配置如下:
<managed-bean>
<description>Sample description</description>
<managed-bean-name>loginBean</managed-bean-name>
<managed-bean-class>com.sample.managedbeans.LoginBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
因此,首先我删除了上述配置,并将 @ManagedBean @SessionScoped
添加到类本身。因为我想将 CDI 添加到项目中,所以我将 @ManagedBean
更改为 @Named
(与 question 2930889 相关)。
现在,当我提交相应的xhtml表单时,字段用户名和密码(在JSP中使用为#{loginBean.username}
) 为空。当我改回 @ManagedBean 时,它工作正常。
我在这里遗漏了什么吗?
亲切的问候, 塞巴斯蒂安
最佳答案
实际上有两个@SessionScoped
注释现在在 ee6 中,@javax.faces.bean.SessionScoped
它来自 jsf 2 规范,只能与 @ManagedBean
一起使用。然后是@javax.enterprise.context.SessionScoped
来自 cdi。我的猜测是您正在使用 jsf 注释,cdi 会忽略该注释,因此 cdi 会创建您的 bean 的一个新实例。
关于java - @Named 的行为与 @ManagedBean 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6581010/