如何在数据库中存储用户会话属性以及以相同形式提供的其他信息?
<p:outputLabel value="user ID:" for="informer" />
<p:inputText id="informer" value="#{session.getAttribute('userID').toString()}"
title="informer" disabled="true" />
只有Session属性被保存为NULL,尽管它出现在表单字段中。其他字段保存正确
我很惊讶您的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" />
我将忽略这里的设计问题(这已经由mabi指出),我将直接回答具体问题:只参考#{sessionScope}
可用的会话映射。
<p:inputText ... value="#{sessionScope.userID}" />
与具体问题无关,为了将其打印到输出,不要使用:
#{session.getAttribute('userID').toString()}
这没有任何意义。请按照常用的EL方式引用:
#{userID}