我使用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";
}
}
答案 0 :(得分:3)
你有两个选择:
保留LoginBean
@SessionScoped
并将其注入您需要的位置。
请记住,您可以使用在其他bean中注入JSF托管bean
@ManagedProperty
注释。存储了已记录的用户信息
进入LoginBean
,您可以从此处检索。您也可以通过以下方式从任何视图中引用它:
#{loginBean.userName}
将您的LoginBean
更改为@ViewScoped
,并让它仅管理与登录相关的视图。然后向此注入一个@SessionScoped
bean,称为LoginInfo
。当登录执行时,创建您的LoginInfo
bean,可以从同一会话中的其余bean访问它。
无需使用HttpSession
。 JSF提供@SessionScoped
托管bean,以避免必须自己注入值。
另见: