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

标签 jsf jsf-2 view-scope notserializableexception

如果我使用 @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/

相关文章:

jsf - 更改 Bootsfaces 数据表的区域设置和语言

jsf - WELD-001303 范围类型 javax.faces.view.ViewScoped 没有事件上下文

eclipse - 有没有办法使用 Eclipse 从 JPA POJO 生成 JSF 表单?

java - JSF 无法从 h :dataTable 中的支持 bean 解析转换器 ID

java - 复选框的 onchange 方法不适用于 jsf 和 javascript

eclipse - EL 标签未渲染

css - 在 PrimeFaces 选项卡组件中更改背景颜色时出现问题

jsf-2 - JBoss 7.1.1 中的嵌套复合组件损坏

jsf - @ViewScoped bean 在 JSF 中如何以及何时被销毁?

JSF:Mojarra 与 OmniFaces @ViewScoped:@PreDestroy 已调用但 bean 不能被垃圾收集