【问题标题】:MyFaces @ViewScoped throws NotSerializableException even with server setting即使使用服务器设置,MyFaces @ViewScoped 也会抛出 NotSerializableException
【发布时间】:2012-02-10 01:03:01
【问题描述】:

所以我希望使用ViewScoped,当我将状态保存方法设置为客户端时,页面将抛出NotSerializableException,页面将转发到错误页面。当我切换到服务器状态保存时,仍然会抛出异常,但会加载页面。

我阅读了许多问题和答案,并认为 ViewScoped/服务器状态保存的组合将消除将所有内容标记为可序列化的需要。有人看到这个问题吗?

Richfaces 4.1/Myfaces 2.1.5

【问题讨论】:

  • 这是 MyFaces 特有的。 Mojarra 没有表现出这种行为。我没有密切关注 MyFaces,所以我不知道为什么 MyFaces 的人明确要求视图范围的 bean 是可序列化的。但是让它们可序列化有什么问题呢?在 Mojarra 中,无论何时服务器重新启动/重新部署同时保持相同的会话,您都会遇到同样的问题,以便会话用户可以继续他们的会话/视图相关的活动。
  • 我在很多遗留服务和 EJB 代码中连接,并且没有能力将链中的所有内容标记为可序列化

标签: java jsf-2 richfaces myfaces


【解决方案1】:

我认为设置这个 servlet 上下文参数可以解决问题:

<context-param>
  <param-name>org.apache.myfaces.SERIALIZE_STATE_IN_SESSION</param-name>
  <param-value>false</param-value>
</context-param>

这将阻止 MyFaces 在将状态保存到会话之前对其进行序列化。这样做是默认原因。我认为是为了节省内存。

【讨论】:

  • 谢谢。在 web.xml 中添加它修复了问题
【解决方案2】:

如果您使用 CDI,则可以使用 MyFaces CODI。它解决了这个问题,您可以将 @ViewScoped bean 用作 CDI bean。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 2012-11-16
    • 2012-08-05
    • 2015-01-01
    相关资源
    最近更新 更多