gpt4 book ai didi

jsf - 使用 @ViewScoped 时的 java.io.NotSerializableException

转载 作者:行者123 更新时间:2023-12-04 18:09:03 25 4
gpt4 key购买 nike

如果我使用 @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来解决它.但是,我不明白其中的道理。为什么这个异常只发生在 View 范围而不是其他范围?

最佳答案

您没有提供 web.xml 中的设置,但是如果 javax.faces.STATE_SAVING_METHOD设置为 client , View 总是序列化的,所以 NotSerializableException总会发生。

应该始终使您的 JSF bean 可序列化,因为应用服务器 5 月 想要序列化 session ,所以所有 session 范围和 View 范围的 bean,即使状态保存设置为 server .

但是如果服务器没有序列化你的 session ,你就不会在 session 范围的 bean 上得到那个错误。但是如果 View 在客户端被序列化,这意味着所有 View 范围的 bean 都被序列化为字符串,该字符串作为隐藏字段与所有请求一起发送,并且 JSF 引擎检测到您的 bean 不可序列化。
NotSerializableException仅当服务器尝试实际序列化您的 bean 时才会发生!

关于jsf - 使用 @ViewScoped 时的 java.io.NotSerializableException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18996151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com