java - @Named 的行为与 @ManagedBean 不同

标签 java jsf cdi

我目前正在将一个项目从 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/

相关文章:

java - 经验丰富的 Java SWT 程序员在转向 Swing 时应注意哪些主要事项?

javascript - JSF 不允许通过 jquery 和 javascript 生成 html 标签?

java - <p :lineChart> Tag Library supports namespace: http://primefaces. org/ui,但没有为名称定义标签:lineChart

jsf - 如何在@Asynchronous 方法中正确使用CDI?

session - JSF2 + CDI @Produces 保持旧的 session 状态

java - Java中使用URLEncodedUtils解析汉字

java - 如何让我的机器人使用 URL 响应时间

java - 如何使用给定的 ssid 和密码测试 wifi 连接并返回给定的 ssid 和密码是否正确的结果

jsf - 将多个组件绑定(bind)到支持 bean 中的一个实例(Primefaces 树)

java - 禁用@Alternative 类