@Named的行为与@ManagedBean不同

时间:2011-07-05 10:12:18

标签: java jsf cdi

我目前正在将一个项目从JBoss 4.2.2迁移到JBoss 6.0.0,我还在使用CDI添加依赖注入,并从JSF 1.2迁移到JSF 2.0。我将一个beans.xml文件添加到ejb-package以及war-package中。

现在我有一个使用托管bean LoginBean.java的xhtml页面。已经在faces-config.xml中配置了bean,如下所示:

<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的表单时,字段 username password (在JSP中用作#{loginBean.username})为空。当我改回@ManagedBean时,它运行正常。

我在这里错过了什么吗?

亲切的问候,   塞巴斯蒂安

1 个答案:

答案 0 :(得分:5)

现在ee6中实际上有两个@SessionScoped注释,@javax.faces.bean.SessionScoped来自jsf 2规范,只能与@ManagedBean一起使用,然后来自cdi的@javax.enterprise.context.SessionScoped 。我的猜测是你正在使用jsf注释,cdi会忽略它,所以cdi会创建你的bean的新实例。