0

我正在使用 PrimeFaces UI 库和 JSF 2。

我有一个支持bean:

public class JobMgmtBean extends ClientBeanBase implements Serializable

public class ClientBeanBase extends BeanBase

(所以继承是JobMgmtBean:ClientBeanBase:BeanBase)。

我想将我JobMgmtBean的从请求范围设置为视图范围,但过了一会儿,我sessionVars定义的内容BeanBase 变为 null并且 bean 不再起作用。

sessionVars我这样初始化BeanBase

protected Map<String,Object> sessionVars = null;

ex = FacesContext.getCurrentInstance().getExternalContext();
sessionVars = ex.getSessionMap();

我每 5 秒刷新一次页面上的一些 PrimeFaces UI 组件(使用<p:poll interval="5"...>),几次刷新后sessionVars变为空。

为什么会这样?

4

2 回答 2

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 引用都可以将其标记为瞬态

private transient Bean bean.

这个 bean 不会被序列化,但问题是你有责任在方法钩子“readObject”中将引用设置回来

private void readObject(java.io.ObjectInputStream stream) throws java.io.IOException, ClassNotFoundException  {
        stream.defaultReadObject();
        // custom logic
        this.bean = ................ 
    }
于 2012-07-13T12:27:06.487 回答
0

ViewScoped bean 需要对对象进行序列化,而我的类扩展了许多具有太多对象的类,这些对象都需要序列化,这是不可能的。这意味着我在这里根本不能使用 ViewScoped。

于 2012-07-13T11:50:05.017 回答