问题JSF Controller, Service and DAO中的User
类是否需要序列化?
答案 0 :(得分:2)
一旦服务器抛出java.io.NotSerializableException
,类名就会出现在异常消息中。足以提示服务器期望该类为Serializable
。
通常,那些(in)直接在HttpSession
中结束的类,因为服务器可能需要将所有HttpSession
个实例转换(序列化)到InputStream
/ {{ 1}},因此可以将它们保存到本地磁盘文件系统,以便在重新启动时记住打开的会话,或者在放入群集时通过网络传输。
在JSF(+ CDI)Web应用程序中,所有byte[]
,@ViewScoped
,@FlowScoped
和@ConversationScoped
bean将(in)直接保存在{{1 }}。所以,很明显,至少那些bean及其所有属性都需要@SessionScoped
。
对于一般设计实践,在整个代码库中被归类为“Java Bean”的任何东西都需要实现HttpSession
。这在JavaBeans Specification中甚至被提及。这仅在涉及例如它时才会被主动使用。一个Serializable
或Serializable
bean,这就是为什么大多数开发人员只是从那些bean中省略它们。从另一方面来看,@RequestScoped
可能是一个很好的提示,可以防止开发人员/维护者在“错误”的范围内(重新)使用支持bean,而不是最初设计用于支持bean的范围。
答案 1 :(得分:1)
JSF应用程序中的每个类都必须实现serializable
接口。
如果要覆盖它,请使用transient
关键字跳过不可序列化类的序列化。
其他信息:
它允许您获取一个对象或一组对象,将它们放在磁盘上或通过有线或无线传输机制发送它们,然后 后来,也许在另一台计算机上,扭转了这个过程:复活了 原始对象。基本机制是将对象展平为 一维的比特流,并将该比特流转回 进入原始对象。
就像“星际迷航”中的转运者一样,它只是将一些复杂的东西变成一个1和0的平坦序列,然后 采取1和0的序列(可能在另一个地方,可能 在另一个时间)并重建原始的复杂 “东西”。
isocpp.org(序列化和反序列化)