【问题标题】:Which classes in a JSF web application need to be Serializable?JSF Web 应用程序中的哪些类需要可序列化?
【发布时间】:2015-09-14 14:21:33
【问题描述】:

问题JSF Controller, Service and DAO 中的User 类是否需要可序列化?

【问题讨论】:

    标签: jsf serialization


    【解决方案1】:

    一旦服务器抛出java.io.NotSerializableException,那么类名就会出现在异常消息中。服务器期望类为Serializable 就足够了。

    通常,这些类(直接)以HttpSession 结尾,因为服务器可能需要将所有HttpSession 实例转换(序列化)为InputStream/byte[],因此它们可以是保存到本地磁盘文件系统以在重启期间记住打开的会话,或者在放入集群时通过网络传输。

    在 JSF (+CDI) Web 应用程序中,所有 @ViewScoped@FlowScoped@ConversationScoped@SessionScoped bean 将直接保存在 HttpSession 中。因此,很明显,至少这些 bean 及其所有属性都需要为 Serializable

    就一般设计实践而言,在整个代码库中被归类为“Java Bean”的任何东西都需要实现SerializableJavaBeans Specification 中甚至提到了这一点。这仅在涉及到例如时不会被积极使用。 @RequestScoped@ApplicationScoped bean,这就是为什么大多数开发人员只是从这些 bean 中省略它们。另一方面,java.io.NotSerializableException 可能是一个很好的提示,可以防止开发人员/维护人员(重新)在“错误”范围内(而不是最初设计支持 bean)使用支持 bean。

    另见:

    【讨论】:

      【解决方案2】:

      JSF 应用程序中的每个类都必须实现serializable 接口。

      如果您想覆盖它,请使用 transient 关键字跳过不可序列化类的序列化。

      其他信息:

      • 对象序列化说明:

      它可以让您获取一个或一组对象,将它们放在磁盘上或通过有线或无线传输机制发送它们,然后 稍后,也许在另一台计算机上,反转该过程:复活 原始对象。基本机制是将对象扁平化为 一维比特流,并将该比特流转回 到原始对象中。

      就像《星际迷航》中的运输机,一切都是为了把一些复杂的东西变成一个由 1 和 0 组成的平坦序列,然后 取 1 和 0 的序列(可能在另一个地方,可能 在另一个时间)并重建原来的复杂 “某事。”

      isocpp.org(序列化和反序列化)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-27
        • 1970-01-01
        • 1970-01-01
        • 2015-01-11
        • 1970-01-01
        • 2010-09-14
        相关资源
        最近更新 更多