gpt4 book ai didi

session - JSF PrimeFaces 丢失数据和 session

转载 作者:行者123 更新时间:2023-12-01 12:57:39 27 4
gpt4 key购买 nike

我正在使用 JSF 和 PrimeFaces 开发一个应用程序。我有一个托管的、 session 范围的、有用户名、密码和 isUserLoggedIn 的。当我处理登录组件时,它会工作并相应地更改我的页面。一旦我移动到另一个页面,我就会丢失用户名数据。我需要在整个应用程序期间访问用户名。有谁知道为什么我丢失了应该在 eb session 范围内的数据?为什么我将它保留在一页而不是其他页面?谢谢

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";
}

}

首页有

<p:commandButton value="SearchCB" action="#{expSearchResultsMB.search()}" ajax="false" />  

在自定义组件中

expSearchResultsMB.search() 发送到 SearchResults我想在哪里显示用户名

 <h:outputLabel value="#{userMB.username}" /> 

我需要在应用程序的每个页面中访问用户名和 isUSerLoggedin。当我检查用户是否登录时,如果他登录了,我会启动 Home。Home 正确显示了用户名,但是当我在家使用 searchCB 时,登陆 SearchResults 页面不显示用户名。

有人能帮忙吗?

最佳答案

import javax.enterprise.context.SessionScoped;

您为 session 范围导入了错误的注解。如果您使用的是 JSF @ManagedBean,那么您需要从 javax.faces.bean 包中导入作用域。以上仅适用于 CDI @Named

因此,相应地修复它:

import javax.faces.bean.SessionScoped;

没有正确范围的 @ManagedBean 将表现为 @NoneScoped。 IE。每次 EL 评估都会创建一个新实例,这正是您所看到的有问题的行为。

关于session - JSF PrimeFaces 丢失数据和 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8834151/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com