使用 @ViewScoped 时出现 java.io.NotSerializedException

2024-02-17

如果我使用@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(使用前将#替换为@)

使用 @ViewScoped 时出现 java.io.NotSerializedException 的相关文章

随机推荐