【问题标题】:@Named behaving different from @ManagedBean@Named 的行为与 @ManagedBean 不同
【发布时间】:2011-09-28 16:32:39
【问题描述】:

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

现在我有一个使用托管 bean LoginBean.java 的 xhtml 页面。 bean 已在 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 的表单时,字段 usernamepassword(在 JSP 中用作 #{loginBean.username} )为空。当我改回@ManagedBean 时,它工作正常。

我错过了什么吗?

亲切的问候, 塞巴斯蒂安

【问题讨论】:

    标签: java jsf cdi


    【解决方案1】:

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

    【讨论】:

    • 天哪。这很讨厌。还没试过,但你是对的。使用了错误的命名空间。
    猜你喜欢
    • 2014-06-12
    • 1970-01-01
    • 2013-10-22
    • 2013-03-03
    • 1970-01-01
    • 2012-04-15
    • 2018-05-14
    相关资源
    最近更新 更多