【发布时间】:2011-10-25 15:28:42
【问题描述】:
我需要从另一个请求范围的 bean 实例化一个会话 bean 并为该 bean 设置值。我怎样才能从另一个 bean 中做到这一点?
实际上,我需要在用户成功登录后实例化 usersession bean,并且我需要设置该会话 bean 的 user 托管属性。
【问题讨论】:
我需要从另一个请求范围的 bean 实例化一个会话 bean 并为该 bean 设置值。我怎样才能从另一个 bean 中做到这一点?
实际上,我需要在用户成功登录后实例化 usersession bean,并且我需要设置该会话 bean 的 user 托管属性。
【问题讨论】:
你需要按照通常的方式手动实例化它并放入ExternalContext#getSessionMap():
UserSession userSession = new UserSession();
userSession.setUser(user);
externalContext.getSessionMap().put("userSession", userSession);
以正确设计的名义,我宁愿将工作委托给 JSF,只需将其注入为 @ManagedProperty:
@ManagedBean
@RequestScoped
public class Login {
@ManagedProperty("#{userSession}")
private UserSession userSession;
public String login() {
// ...
if (user != null) {
userSession.setUser(user);
}
// ...
}
}
【讨论】:
在登录时设置usersession bean 的user 属性。登录前是否实例化无关紧要,因为它的user 属性将保持为空,直到登录完成。
并在您的请求中注入usersession bean,以处理带有@javax.inject.Inject 注释的bean。
【讨论】: