JSF HttpSession登录传递参数?

时间:2013-12-04 12:57:51

标签: java hibernate jsf jsf-2 primefaces

我使用Hibernate + JSF 2.0登录表单,我的代码工作正常但我的问题是如何在登录后显示用户个人资料,如名字,姓氏等...我的朋友告诉我应该使用HttpSession但是我不能怎么用它。希望有人建议我最好的方式。这是我的代码:

login.xhtml

<h:form id="formLogin">
    <h:outputLabel for="username" value="Username:" />
    <p:inputText value="#{loginBean.username.username}"
                 id="username" required="true" label="username" styleClass="span12" />

    <h:outputLabel for="password" value="Password:" />
    <h:inputSecret value="#{loginBean.username.password}"
                   id="password" required="true" label="password" styleClass="span12" />
    <p:commandButton id="loginButton" value="Login" update=":growl" ajax="false"
                     action="#{loginBean.login}"/>
</h:form>

loginBean.java

public class loginBean {

    private Users username;
    private UsersDao userdao;

    /** Creates a new instance of loginBean */
    public loginBean() {
        userdao = new UsersDao();
        username = new Users();
    }

    public Users getUsername() {
        return username;
    }

    public void setUsername(Users username) {
        this.username = username;
    }

    public String login(){
        RequestContext context = RequestContext.getCurrentInstance();
        FacesMessage msg;
        boolean loggedIn;

        username = userdao.login(username);
        if(username != null) {
            loggedIn = true;
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("username", username.getPassword());
            return "index";
        } else {
            loggedIn = false;
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Login Error", "Invalid credentials");
            if(this.username == null){
                this.username = new Users();
            }
            FacesContext.getCurrentInstance().addMessage(null, msg);
            return null;
        }
    }

    public String logout(){
        RequestContext context = RequestContext.getCurrentInstance();
        FacesContext facescontext = FacesContext.getCurrentInstance();

        HttpSession sesion = (HttpSession) facescontext.getExternalContext().getSession(false);
        sesion.invalidate();

        return "logout";
    }

}

1 个答案:

答案 0 :(得分:3)

你有两个选择:

  1. 保留LoginBean @SessionScoped并将其注入您需要的位置。 请记住,您可以使用在其他bean中注入JSF托管bean @ManagedProperty注释。存储了已记录的用户信息 进入LoginBean,您可以从此处检索。您也可以通过以下方式从任何视图中引用它:

    #{loginBean.userName}

  2. 将您的LoginBean更改为@ViewScoped,并让它仅管理与登录相关的视图。然后向此注入一个@SessionScoped bean,称为LoginInfo。当登录执行时,创建您的LoginInfo bean,可以从同一会话中的其余bean访问它。

  3. 无需使用HttpSession。 JSF提供@SessionScoped托管bean,以避免必须自己注入值。

    另见: