从另一个请求范围的bean实例化会话范围的托管bean

时间:2011-10-25 15:28:43

标签: java jsf

我需要从另一个请求范围的bean& amp;来实例化一个会话bean。设置该bean的值。我怎么能从另一个bean那里做到这一点?

实际上我需要在用户成功登录后实例化usersession bean。我需要设置该会话bean的user托管属性。

2 个答案:

答案 0 :(得分:3)

您需要以通常的方式手动实例化它并将其放入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);
        }

        // ...
    }

}

答案 1 :(得分:2)

登录时设置user bean的usersession属性。它是否在登录前进行实例化并不重要,因为它的user属性在登录完成之前将保持为空。

使用usersession注释在请求处理的bean中注入@javax.inject.Inject bean。