我正在使用 JSF 和 PrimeFaces 开发一个应用程序。我有一个托管的,会话范围的,具有用户名、密码和 isUserLoggedIn。当我处理登录组件时,它会起作用并相应地更改我的页面。一旦我移动到另一个页面,我就会丢失用户名数据。我需要在整个应用程序期间访问用户名。有谁知道为什么我会丢失应该 eb 会话范围的数据?为什么我要保留一页而不保留其他页面?谢谢
import authentication.AuthenticatorManagerLocal;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean
@SessionScoped
public class UserMB {
@EJB
private AuthenticatorManagerLocal authenticatorManager;
/** Creates a new instance of UserMB */
public UserMB() {
}
Boolean isUserLoggedIn;
String username;
String password;
String nickName;
public String getNickName() {
nickName="vanessa";
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public Boolean getIsUserLoggedIn() {
return isUserLoggedIn;
}
public void setIsUserLoggedIn(Boolean isUserLoggedIn) {
this.isUserLoggedIn = isUserLoggedIn;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String authenticateUser(){
isUserLoggedIn= authenticatorManager.authenticateUser(username, password);
if(isUserLoggedIn)return "Home";
else
return null;
}
public void logout(){
isUserLoggedIn=false;
username="";
password="";
}
public String goToIndex(){
return "Index";
}
}
HOME有
<p:commandButton value="SearchCB" action="#{expSearchResultsMB.search()}" ajax="false" />
在自定义组件内
expSearchResultsMB.search() 发送到我想显示用户名的 SearchResults
<h:outputLabel value="#{userMB.username}" />
我需要在应用程序的每个页面中访问用户名和 isUSerLoggedin。当我检查用户是否登录时,如果他登录了,我会启动 Home。主页正确显示用户名,但是当我在家使用 searchCB 时,登陆 SearchResults 页面不显示用户名。
任何人都可以帮忙吗?