通过JSF保存Session属性

时间:2014-03-13 14:25:21

标签: jsf session

如何在数据库中存储用户会话属性以及同一表单中提供的其他信息?

<p:outputLabel value="user ID:" for="informer" />
<p:inputText id="informer" value="#{session.getAttribute('userID').toString()}" 
 title="informer" disabled="true" />

只有Session属性保存为NULL,尽管它出现在表单字段中。其他字段保存得当。

提前致谢。

2 个答案:

答案 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}