JSF 支持 Bean 应该是可序列化的吗?

2022-09-01 03:09:40

我收到以下消息:

[#|2010-07-30T11:28:32.723+0000|警告|glassfish3.0.1|javax.faces|_ThreadID=37;_ThreadName=Thread-1;|将不可序列化的属性值设置到 ViewMap: (键: MyBackingBean, 值类: foo.bar.org.jsf.MyBackingBean)|#]

这是否意味着我的 JSF 支持 Bean 应该实现 Serializable?还是他们指的是其他问题?


答案 1

是的,您理解正确。视图基本上存储在会话作用域中。会话范围在 JSF 中,由 Servlet 的 HttpSession 提供支持。所有会话属性都应该实现 Serializable,这是因为普通的 servletcontainer 可能会将会话数据保存到硬盘等,以便能够与集群中的其他服务器共享,或者在负载过重的情况下生存,或者在服务器重新启动期间恢复会话。

只有在相应的类实现 的情况下,才能在硬盘上存储原始 Java 对象。然后,可以使用 ObjectOutputStream 将它们写入硬磁盘,并使用 ObjectInputStream 从硬盘读取它们。servletcontainer透明地管理这一切,你实际上不需要担心它。JSF只是给出一个警告,以便您了解风险。Serializable


答案 2

使用会话、应用程序或会话作用域的 Bean 必须是可序列化的,但使用请求作用域的 Bean 不必是可序列化的。资料来源:https://docs.oracle.com/javaee/6/tutorial/doc/gjbbk.html