如何在数据库中存储用户会话属性以及同一表单中提供的其他信息?
<p:outputLabel value="user ID:" for="informer" />
<p:inputText id="informer" value="#{session.getAttribute('userID').toString()}"
title="informer" disabled="true" />
只有Session属性保存为NULL,尽管它出现在表单字段中。其他字段保存得当。
提前致谢。
答案 0 :(得分:1)
我很惊讶你的JSF实现没有引发错误,因为输入组件的value
属性需要是可写的 - 而.toString()
产生的字符串显然不是。
前进的方法是将值设置为实际上将保存数据的字段:
@Entity
public class User {
private String userId;
//... other fields
}
@Named @ViewScoped
public class UserBean implements Serializable {
private User myUser;
@PostConstruct
public void init() {
String uid = FacesContext.getCurrentInstance().getExternalContext()
.getSessionMap().get("userID").toString();
myUser = new User();
myUser.setUserId(uid);
}
}
在你看来:
<p:outputLabel value="user ID:" for="informer" />
<p:inputText id="informer" value="#{userBean.myUser.userId}" disabled="true" />
答案 1 :(得分:1)
我会忽略这里的设计问题(这已经由mabi指出)我将直接回答具体问题:只需将#{sessionScope}
提供的会话地图引用。
<p:inputText ... value="#{sessionScope.userID}" />
无关具体问题,仅出于打印输出的目的,请勿使用:
#{session.getAttribute('userID').toString()}
这没有任何意义。只需用通常的EL方式来引用它:
#{userID}