我正在尝试在JSF上构建一个简单的博客。但是,我不知道如何将相同的有状态ejb实例注入2个不同的托管bean。我知道注入可以通过使用@ManagedProperty注释间接完成。这样的事情:
@ManagedBean
@ViewScoped
public class PostController implements Serializable {
private static final long serialVersionUID = 1L;
private Post temporaryPost;
@ManagedProperty(value = "#{authenticationController}")
private AuthenticationController authenticationController;
@Inject
private PostEJB postEJB;
public void save() {
getTemporaryPost().setAuthor(
getAuthenticationController().getAuthenticationEJB()
.getCurrentSessionUser());
postEJB.create(getTemporaryPost());
}
}
我想摆脱
@ManagedProperty(value =“#{authenticationController}”) private AuthenticationController authenticationController;
直接注入AuthenticationEJB,如
@Inject private AuthenticationEJB authenticationEJB;
所以,而不是
getAuthenticationController()。getAuthenticationEJB() .getCurrentSessionUser()
我会得到
authenticationEJB.getCurrentSessionUser()
但是,问题是这是新的authenticationEJB实例,它不包含当前登录的用户(User为null)。同时,authenticationController.authenticationEJB.currentsessionuser包含登录用户。
提前致谢!
Finnaly得到了答案!很容易:
@ManagedProperty(value = "#{authenticationController.authenticationEJB}")
private AuthenticationEJB authenticationEJB;
现在它指向同一个authenticationEJB实例。但是,我相信可能还有其他一些方法可以做到这一点。
答案 0 :(得分:0)
嗯,你得到了答案,但也许有几个笔记
PostController
注释直接将bean注入@EJB
?CDI beans
而不是JSF Managed Beans,它们很快就会被弃用(并且整个Java EE堆栈正逐渐向所有CDI使用)@ManagedProperty
,每个bean(基本上是你的应用程序中的任何类)将获得注入@Inject
注释。同样的事情适用于EJB,因此CDI类型统一了对大多数类型的bean的访问。