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

时间:2010-07-30 14:59:05

标签: java serialization jsf

我收到这些消息:

  

[#| 2010-07-30T11:28:32.723 + 0000 |警告| glassfish3.0.1 | javax.faces | _ThreadID = 37; _ThreadName =螺纹-1; |设定   非序列化属性值转换为   ViewMap :(关键字:MyBackingBean,值   类:   foo.bar.org.jsf.MyBackingBean)|#]

这些是否意味着我的JSF支持bean应该实现Serializable?或者他们是否提到了其他一些问题?

3 个答案:

答案 0 :(得分:63)

是的,你理解正确。视图基本上存储在会话范围中。会话范围在Servlet的HttpSession支持的JSF中。所有会话属性都应该实现Serializable,这是因为平均servlet容器可以将会话数据持久保存到硬盘中,以便能够与群集中的其他服务器共享,或者承受重负载,或者在服务器期间恢复会话重新开始。

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

答案 1 :(得分:0)

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

答案 2 :(得分:-2)

是, Backing Beans / Managed Beans基本上是为了保持视图的状态,因此应该实现序列化,但UI组件可能不允许它可序列化,JSF Runitime会向您显示错误/警告消息。 您可以做的一件事是在您的MBean中标记此类组件瞬态。

感谢。