Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Serialization ViewScoped Bean中SessionScope的ManagedProperty-瞬态?_Serialization_Jsf 2_Managed Bean_Transient - Fatal编程技术网

Serialization ViewScoped Bean中SessionScope的ManagedProperty-瞬态?

Serialization ViewScoped Bean中SessionScope的ManagedProperty-瞬态?,serialization,jsf-2,managed-bean,transient,Serialization,Jsf 2,Managed Bean,Transient,我有这样一个JSFbean结构: @ManagedBean @ViewScoped public class ViewBeany implements Serializable { .... @ManagedProperty(value='#{sessionBeany}) transient private SessionBeany sessionBeany; ... public getSessionBeany() { ... }; public setSe

我有这样一个JSFbean结构:

@ManagedBean
@ViewScoped
public class ViewBeany implements Serializable {

....
    @ManagedProperty(value='#{sessionBeany})
    transient private SessionBeany sessionBeany;
...

    public getSessionBeany() { ... };
    public setSessionBeany(SessionBeany sessionBeany) { ... };

}
之所以出现
瞬态
,是因为会话bean具有一些不可序列化的成员,因此无法使其可序列化

这行吗?
如果不是,我如何解决无法序列化
SesionBeany
但必须将其作为视图范围bean下的托管属性的问题


谢谢

这行不通。如果视图范围的bean被序列化,则跳过所有的
transient
字段。JSF在反序列化之后不会重新注入托管属性,因此最终会得到一个视图范围的bean,而没有会话范围的bean属性,这只会导致NPE

在这个特定的构造中,最好的方法是在getter中引入延迟加载,并通过getter而不是通过直接字段访问来获取会话bean

private transient SessionBeany sessionBeany;

public SessionBeany getSessionBeany() { // Method can be private.
    if (sessionBeany == null) {
        FacesContext context = FacesContext.getCurrentInstance();
        sessionBeany = context.getApplication().evaluateExpressionGet(context, "#{sessionBeany}", SessionBeany.class);
    }

    return sessionBeany;
}

如果您没有这样的限制,您也可以将
状态保存模式设置为
服务器
,避免将视图序列化到客户端。谢谢。我只是很惊讶JSF没有一个“流线型”的解决方案来解决这个问题,因为我认为这并不罕见。我已经想知道它是否不应该是一个有状态的EJB。EJB是作为可序列化代理注入的,因此您不需要担心序列化。