gpt4 book ai didi

jsf-2 - 是否应该将 PARTIAL_STATE_SAVING 设置为 false?

转载 作者:行者123 更新时间:2023-12-04 04:52:07 32 4
gpt4 key购买 nike

似乎今天(2012 年 4 月),MyFaces 和 Mojarra 的 JSF 2.1 实现在部分状态保存方面都有缺陷,应该将 PARTIAL_STATE_SAVING 设置为 false。

这是真的?

最佳答案

Should PARTIAL_STATE_SAVING be set to false?


仅限 当您遇到与 web 应用程序中的部分状态保存相关的一般缺陷时,实际上无法以其他方式解决/变通。部分状态保存在整体性能和内存使用方面具有主要优势。另见 Why JSF saves the state of UI components on server?
我不能 100% 可靠地代表 MyFaces,但是在 Mojarra 中,当您绑定(bind)标签处理程序的任何属性时,部分状态保存问题的根本原因就会显现出来(标签处理程序可以通过缺少 rendered 属性来识别)在标签(例如 JSTL 标签上)到 View 范围的 bean,或者当您绑定(bind) id 时或 binding JSF 组件的属性到 View 范围的 bean(即在构建/恢复 View 期间解析这些属性)。
此问题是由 JSF issue 1492 中所述的鸡蛋问题引起的。和 JSF spec issue 787 :启用部分状态保存后, View 范围的 bean 存储在部分 View 状态中。因此,要提取 View 范围的 bean,必须恢复部分 View 状态。在恢复(构建) View 期间,将评估所有上述属性中的 EL。但是,由于此时没有可用的 View 范围 bean 实例,因此将创建一个全新的实例。但是,这会将其所有属性设置为默认值!在恢复 View 并取回原始 View 范围的 bean 后,它们将被放回 View 范围,覆盖在恢复 View 期间创建的(临时)实例。但是这些属性的 EL 表达式已经基于完全不同的实例进行了评估,无法恢复。
自 Mojarra 2.1.18 和 2.2.0 以来,通过在 session 中存储 View 范围的 bean 解决了这个鸡蛋问题。如果由于某种原因无法升级,则确实可以通过设置 javax.faces.PARTIAL_STATE_SAVING 禁用部分状态保存来解决。至 false .另一种方法是根本不将上述属性绑定(bind)到 View 范围的 bean,而是寻找替代解决方案。
您也可以设置 javax.faces.FULL_STATE_SAVING_VIEW_IDS反而。这允许您指定需要关闭部分状态保存的所有 View ID 的逗号分隔列表:
<context-param>
<param-name>javax.faces.FULL_STATE_SAVING_VIEW_IDS</param-name>
<param-value>/some.xhtml,/other.xhtml</param-value>
</context-param>
这使您可以尽可能地从部分状态保存中受益,并且仅对部分状态保存相关问题实际上无法修复的 View 子集关闭它。
也可以看看:
  • Communication in JSF 2.0 - @ViewScoped fails in tag handlers
  • 关于jsf-2 - 是否应该将 PARTIAL_STATE_SAVING 设置为 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10337015/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com