【问题标题】:Serialization of ManagedPropertyManagedProperty 的序列化
【发布时间】:2012-06-21 15:04:00
【问题描述】:

JSF 的@ViewScoped@ManagedProperty 存在以下问题:我们的ManagedBeans 基本上如下所示:

@ManagedBean
@SessionScope
public class SessionConfig implements Serializable
{
    // ...
}

@ManagedBean
@ViewScope
public class SomeController implements Serializable
{
    @ManagedProperty( value="#{sessionConfig}" )
    private SessionConfig sessionConfig;
    // public getter and setter

    // ...
}

在处理请求后,控制器按预期进行序列化。 我希望 @ManagedProperty sessionConfig 会在序列化中进行特殊处理,特别是在反序列化后将“重新链接”。然而,事实证明,在反序列化之后,sessionConfig 只是实际 SessionConfig-Bean 的过时克隆。

问题:

  1. 这是预期的行为吗?
  2. 如何让 JSF 在反序列化后重新评估 @ManagedProperty

目前,我们在反序列化后“手动”重新评估所有托管属性。它有效,但显然不正确。

谢谢!

【问题讨论】:

  • 你用什么序列化的?

标签: jsf-2 deserialization managed-bean view-scope


【解决方案1】:

一种解决方案是避免 @ViewScoped bean 中的 @ManagedProperty 并按需评估 EL 表达式。 @ViewScoped bean 将在每个请求结束时存储在 Session 中(并因此被序列化)。

FacesContext ctx = FacesContext.getCurrentInstance();
ctx.getApplication().evaluateExpressionGet(ctx, "#{sessionConfig}", SessionConfig.class)

请注意,如果必须经常计算表达式,这可能会严重影响性能。

更好的方法可能是提供自定义序列化方法,如下所述:http://www.oracle.com/technetwork/articles/java/javaserial-1536170.html 这样每次 bean 反序列化时,表达式都可以自动解析。

【讨论】:

  • java.sun.com 链接不再有效。您能否提供正确的链接。谢谢。
猜你喜欢
  • 2015-10-03
  • 2012-05-23
  • 2014-01-08
  • 1970-01-01
  • 2012-04-13
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
相关资源
最近更新 更多