将实体注入到ViewScoped Bean中

| 我是CDI的新手,并且想将其用于JSF2应用程序。类“ 0”是一个简单的“ 1” -Bean,并在bean中的“ 2”方法中创建了一个对象:
@Stateful
@Named @javax.faces.bean.SessionScoped
public class UserBean implements Serializable
{
    @Named
    private MyUser user;

    //setter and getter
    //@PostConstruct
}
在JSF页面中访问用户就像一个魅力:charm4ѭ。但是现在我想从其他bean访问此对象,例如在这
@ViewScopedBean
中:
@Named @javax.faces.bean.ViewScoped
public class TestBean implements Serializable
{       
    @Inject private MyUser user;
}
我希望当前的(已登录)ѭ7可以在其他几个bean中使用,但是我不确定如何执行此操作。只是
@Inject
它是行不通的(我很确定这将是一点点简单)。
13:56:22,371 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController]
Error installing to Start: name=vfs:///Applications/Development/
jboss-6.0.0.Final/server/default/deploy/test.ear_WeldBootstrapBean state=Create:
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied
dependencies for type [MyUser] with qualifiers [@Default] at injection
point [[field] @Inject private test.controller.mbean.TestBean.user]
从其他bean访问ѭ10的最佳方法是什么?像
UserBean bean = (UserBean)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(\"UserBean\");
这样的JSF1.2样式代码似乎是过时的!     
已邀请:
        首先:您不想直接注入实体。实体完全由ORM框架独立控制,并具有自己的生命周期。不要将它们用作托管bean。   根据这个定义,JPA   实体由技术管理   豆子。但是,实体有其   拥有特殊的生命周期,状态和   身份模型,通常   由JPA实例化或使用new实例化。   因此,我们不建议直接使用   注入实体类。我们   特别建议不要分配   @Dependent以外的范围   实体类,因为JPA无法   持续注入CDI代理。 有关详细信息,请参见此处。 要回答您的问题:即使在Seam 2中是可能的,您也不能“认证”用户,即使这样,CDI的整个代理机制也不再允许这种情况。您需要执行以下操作: 编写一个处理身份验证的托管bean,并将其放入正确的范围(可能是会话范围)。 如果登录成功,请使用此bean的属性来存储经过身份验证的用户。 使用生产者方法(可能带有
@LoggedIn
这样的限定词)使用户在您的应用程序中可用 像这样注入用户:
@Inject
@LoggedIn
private User user
这就是CDI方式;-)     
        @Inject ed bean也是@Named bean吗? 如果是这样,请使MyUser bean的作用域小于TestBean。请记住,@ ViewScoped bean的托管属性必须是@ ViewScoped,@ SessionScoped或@ApplicationScoped     
        CDI没有指定“ 14”注释。这是一个JSF2注释。允许的唯一注释是:
@RequestScoped
@SessionScoped
@ApplicationScoped
@Dependent
@ConversationScoped
。前三个是CDI唯一允许的JSF范围。 如果您需要支持
@ViewScope
注释,则需要自己编写。幸运的是,以前有人这样做过。     

要回复问题请先登录注册