我正在使用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。 Home正确显示用户名,但在家中我使用searchCB登陆SearchResults页面时不会显示用户名。
有人可以帮忙吗?
答案 0 :(得分:4)
import javax.enterprise.context.SessionScoped;
您为会话范围导入了错误的注释。如果您使用的是JSF @ManagedBean
,那么您需要从javax.faces.bean
包导入范围。以上仅适用于CDI @Named
。
所以,相应地修复它:
import javax.faces.bean.SessionScoped;
没有正确范围的@ManagedBean
将表现为@NoneScoped
。即将在每次EL评估中创建一个新实例,这正是您所看到的问题行为。