jsf - 创建 session 范围托管 bean 时可序列化接口(interface)的重要性

标签 jsf session serialization jsf-2.2 managed-bean

我不明白序列化在 session 范围的 JSF 托管 bean 中是如何工作的。为什么在创建 session 范围的 JSF 托管 bean 时实现 Serializable 接口(interface)很重要?

最佳答案

@SessionScoped bean 最终存储在用户的 HTTP session 中。

这意味着当 Java EE 部署实现 session 保留方案时(例如,tomcat 将尝试在服务器关闭时将当前 session 保存到 .ser 文件,if 部署者如此选择),这些 session 范围的 bean 也将成为将被持久化的有效负载的一部分。

一个不可序列化的 session 范围的 bean 在这里成为一个问题,因为它呈现了它所属的整个 HTTP session ,不可持久(任何尝试序列化包含不可序列化成员的对象都会导致 NotSerializableException除了一些特殊处理)

顺便说一句,这意味着即使您的 session 范围 bean 实现了 Serializable,它的所有成员变量也必须是可序列化的或标记为 transient

简而言之,可能通过序列化持久化的给定 HTTP session 的整个对象图必须标记为可序列化或 transient

阅读更多:

关于jsf - 创建 session 范围托管 bean 时可序列化接口(interface)的重要性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24985593/

相关文章:

java - Spring + Jboss7 @Transactional 不工作

PHP - 默认 session 处理与自定义 session 处理

PHP - 使用 __construct() 检查是否有 session

jsf - 使用 JSF bean 验证在一个字段上使用多个验证器

java - 如何在 JSF + Spring + Hibernate 中使用 DTO

java - "cannot validate component with empty value"HtmlInputText 组件不为空时发出警告

C# MVC 应用程序 - 在不丢失 session 数据的情况下更改 session ID

C# Xml序列化、集合和根元素

java - 线程 "main"org.apache.spark.SparkException : Task not serializable 中出现异常

c# - EF 4.1 - 代码优先 - JSON 循环引用序列化错误