美好的一天
这个问题已经在创建MCVE时得到解决(感谢Kukeltje让我这样做:))
请参阅下面发布的答案,了解有效的MCVE。
@SessionScoped
@Stateful
public class StoringUserInfo implements Serializable {
private HashMap<String, String> userSettingMap;
private String userName = "Test";
public StoringUserInfo() {
this.userSettingMap = new HashMap<>();
}
public void addSetting(String name, String setting) {
userSettingMap.put(name, setting);
}
public String getSetting(String name) {
return userSettingMap.get(name);
}
public HashMap<String, String> getUserSettingMap() {
return userSettingMap;
}
public void setUserSettingMap(HashMap<String, String> userSettingMap) {
this.userSettingMap = userSettingMap;
}
public String getUserName() {
return userName;
}
public void setUserName(String projectName) {
this.projectName = userName;
}
}
例如,在一个名为@ViewScoped@的bean中,我想这样做:
@Named
@ViewScoped
public class NewProjectView implements Serializable {
private static final long serialVersionUID = 1L;
private String userName;
@Inject private transient StoringUserInfo userInfo;
public void submitForm(){
userInfo.setUserName("NEW")
// return to dashboard
FacesContext.getCurrentInstance().getViewRoot().getViewMap().clear();
PrimeFaces.current().ajax().update(":content", ":formHeader:mainMenu", ":formHeader:growl");
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
然后,在另一个@ViewScoped@命名bean上,我希望检索存储的值(由于@PostConstruct获取空值,尝试抑制应用程序部署上的错误)
@Named
@ViewScoped
public class EditProjectView implements Serializable {
private static final long serialVersionUID = 1L;
private String userName;
@Inject private transient StoringUserInfo userInfo;
@PostConstruct
public void init() {
getValues()
}
private void getValues(){
try {
userName = userInfo.getUserName(); // this must display on form load
} catch (Exception e) {
e.printStackTrace();
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
应用内的工作流确保设置值的页面在需要这些值的页面之前被访问。正确调试也显示了这一点。
但是,@ViewScoped@命名bean始终显示null,它们从不从@SesionScoped bean重新读取值?我错过了什么?
在@SessionScoped@Stateful bean中将默认值设置为用户名字符串,则在第二个表单上显示名称“Test”。
但是,在表单呈现/加载时,不会读取更新后的值。因此,@PostConstruct似乎只在应用程序部署时执行?
我还将此添加到我的xhtml文件中:
<o:form id="editProjectForm">
<f:metadata>
<f:viewAction action="#{editProjectView.getProjectValues}"/>
<p:ajax update="editProjectFieldSet"/>
</f:metadata>
<p:fieldset id="editProjectFieldSet" legend="#{editProjectView.userName}"/>
但它仍然不会在呈现之前重新查询SessionScoped bean。它只显示“Test”的默认初始值
试试这个:
HttpSession session = request.getSession();
因此,您可以请求一个具有名称的参数:
String email = (String) session.getAttribute("emailsession");
如果您使用的是CDI,请确保导入javax。企业上下文sessionscoped
而不是javax。面孔。豆已处理会话
。
两个版本之间的主要区别是:
1. Replaced <o:form> with <h:form>
应用程序正在使用PrimeFaces 6.2在WildFly 14上运行。9和OmniFaces 3.2
我正在使用Glassfish服务器(一个简单的购物车)尝试我的第一个EJB。我打算为每个Http会话使用CartBean。如果我的车豆跟着-
问题内容: 有状态会话Bean定义如下: 有状态会话Bean对象的状态由其实例变量的值组成。在有状态会话Bean中,实例变量代表唯一的客户端Bean会话的状态。因为客户端与其bean进行交互(“交谈”),所以这种状态通常称为对话状态。 无状态会话Bean定义如下: 无状态会话Bean无状态会话Bean不会与客户端保持对话状态。当客户端调用无状态Bean的方法时,该Bean的实例变量可能包含特定于该
我正在用雅加达EE和雅加达Faces(JSF)进行实验。我刚刚制作了一个名为session-scoped bean的CDI(因为JSF managedBean现在已被弃用),我想知道,当作用域bean(在CDI容器中运行)可用时,为什么要使用有状态EJB,在我看来,任何事务都可以使用注入到CDI管理bean中的无状态bean来完成。 :),任何现实世界的用例都会非常有用。 对于那些想知道的人,我的
我编写了一个会话范围的托管bean,用于在domino xpages应用程序中缓存sesion用户特定的信息,如下代码所示: 然后,我在faces配置中声明了它,使其成为会话范围的bean: 在测试bean时,我通过#{NBUser.fullUserName}使用它,它并不总是返回当前domino http会话上下文的用户,例如,我首先由用户“user1”登录并注销,然后由user2登录,bean
对于有状态会话bean(SFSB)和无状态会话bean(SLSB)的用法,我有点困惑。 我知道SFSB与客户保持状态。这很有帮助:什么时候使用有状态会话bean而不是无状态会话bean? 这里和许多其他地方提供的示例是SFSB的购物车。 “如果一个任务需要一系列方法调用(不止一次),并且您需要保留以前的结果以在下一次调用中使用它们,那么就可以使用SFSB”--Source。这将更像是签出(页面之间
我的密码\u散列有问题,当我登录时,我想让用户登录会话,但当我使用密码验证时不工作,回显不返回任何内容。我怎样才能解决这个问题?谢谢这是我的代码: 这个代码完美的工作时,我不使用password_verify。