如果我使用@ViewScoped
在JSF中,则出现以下异常:
java.io.NotSerializableException: com.solv.basics.Basics
java.io.ObjectOutputStream.writeObject0(Unknown Source)
java.io.ObjectOutputStream.writeObject(Unknown Source)
java.util.HashMap.writeObject(Unknown Source)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
java.io.ObjectOutputStream.writeSerialData(Unknown Source)
java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
我可以通过让bean实现来解决这个问题Serializable
。但是,我不明白其中的道理。为什么此异常仅发生在视图范围而不是其他范围?
您没有提供 web.xml 中的设置,但如果javax.faces.STATE_SAVING_METHOD
被设定为client
,视图始终是序列化的,因此NotSerializableException
总会发生。
You should始终使 JSF beans 可序列化,因为应用程序服务器may想要序列化会话,因此所有会话范围和视图范围的 bean,即使状态保存设置为server
.
但是,如果服务器没有序列化您的会话,您将不会在会话范围的 bean 上收到该错误。但是,如果视图在客户端上序列化,则意味着所有视图范围的 bean 都被序列化为字符串,该字符串作为隐藏字段与所有请求一起发送,并且 JSF 引擎正在检测您的 bean 不可序列化。
NotSerializableException
仅当服务器尝试实际序列化您的 bean 时才会发生!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)