@Named的行为与@ManagedBean不同

Seb*_*mba 2 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的xhtml页面LoginBean.java.已经在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>
Run Code Online (Sandbox Code Playgroud)

所以,首先我删除了上面的配置并添加@ManagedBean @SessionScoped到类本身.因为我想CDI添加到项目中,我改变了@ManagedBean@Named(与质疑2930889).

现在,当我提交相应xhtml的表单时,字段usernamepassword(在JSP中使用#{loginBean.username})为null.当我改回来时@ManagedBean,它工作正常.

我在这里错过了什么吗?

亲切的问候,塞巴斯蒂安

Jör*_*ann 5

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