通过JSF保存Session属性



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

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

相关内容

  • 没有找到相关文章

最新更新