我正在使用PrimeFaces UI库和JSF 2.
我有一个支持bean:
public class JobMgmtBean extends ClientBeanBase implements Serializable
和
public class ClientBeanBase extends BeanBase
(所以继承是JobMgmtBean:ClientBeanBase:BeanBase
)。
我想将JobMgmtBean
从请求范围设置为查看作用域,但过了一段时间sessionVars
中定义的BeanBase
变为空并且bean不再具有功能了。
我在sessionVars
中初始化BeanBase
,如下所示:
protected Map<String,Object> sessionVars = null;
ex = FacesContext.getCurrentInstance().getExternalContext();
sessionVars = ex.getSessionMap();
我每隔5秒刷新页面上的一些PrimeFaces UI组件(使用<p:poll interval="5"...>
),并在几次刷新后sessionVars
变为空。
为什么会这样?
答案 0 :(得分:1)
您可以使用View范围,前提是您可以在反序列化期间组合对象的状态。
Java为可序列化的类提供方法挂钩,您可以在其中执行自定义逻辑。
private void writeObject(java.io.ObjectOutputStream stream) throws java.io.IOException {
//custom logic
stream.defaultWriteObject();
}
private void readObject(java.io.ObjectInputStream stream) throws java.io.IOException, ClassNotFoundException {
stream.defaultReadObject();
// custom logic
}
您认为不想序列化的任何bean引用都可以将其标记为 transient 。
private transient Bean bean.
这个bean不会被序列化,但问题是你有责任 在方法钩子中对其进行去细化时设置引用 “的readObject”
private void readObject(java.io.ObjectInputStream stream) throws java.io.IOException, ClassNotFoundException {
stream.defaultReadObject();
// custom logic
this.bean = ................
}
答案 1 :(得分:0)
ViewScoped bean需要对象进行序列化,并且我的类扩展了许多具有太多对象的类,这些对象都需要序列化,这是不可能的。这意味着我根本不能使用ViewScoped。