gpt4 book ai didi

ajax - JSF 2 View Expired Weirdest Bug(更新 - 仅在将状态保存到服务器时发生)

转载 作者:行者123 更新时间:2023-12-05 01:38:12 24 4
gpt4 key购买 nike

错误是这样的——我的 JSF 应用程序中有几种形式。如果我在特定表单外激活 AJAX 调用 20 次或更多次,我会收到 “No Saved View State Could be found for the view identifier” 异常。

UPDATE 1 这仅在状态保存在服务器上时发生。设置此选项后,问题不会发生:

<context-param>
<description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>

更新 1 结束

例如,假设我的应用程序中有一个表单 A、表单 B、表单 C:(实际的app很复杂,我会尽量带上所有相关信息)

<h:form>
<h:commandButton value="A">
<f:ajax render="@form"/>
<h:commandButton>
<h:form>

<h:form>
<h:commandButton value="B">
<f:ajax render="@form"/>
<h:commandButton>
<h:form>

<h:form>
<h:commandButton value="C">
<f:ajax render="@form"/>
<h:commandButton>
<h:form>

一个更重要的因素,每个时间点只有一种形式可见,其他形式有display:none。最后,所有 bean 都是 session 范围的。

现在,接下来的点击会导致异常(对于每一行,最后一次点击会导致异常)

  1. Ax20, B
  2. Ax19、B、C
  3. Ax10、Cx10、B
  4. Bx5、Cx5、Bx5、Cx5、A

这不会导致异常:

  1. Ax18、B、C、A。

换句话说,如果表单中的某个按钮在最近 20 次点击中没有被点击,则下次点击时,将抛出 No save view state 异常。
同一个表单中的所有按钮都等同于表单,这意味着,如果 form A 有按钮 A1A2 那么下面的内容将 导致异常:

  1. A1x20, A2
  2. A1x19、B、A2
  3. A1, A2x20, B, A1

有什么想法吗?!?这让我抓狂。

最佳答案

您已超出单个页面的 session 限制中的查看次数。该限制默认为 15,但可通过 web.xml 中的上下文参数进行配置。每个表单在技术上都是一个独立的 View ,具有自己的 View 状态。当您在不触及其他表单的情况下连续 ajax 更新一个表单时,它们在服务器端的 View 状态将缓慢但肯定会过期。

在客户端保存 View 状态确实可以解决这个问题,因为服务器端 session 中的任何内容都不会被存储。它只会使响应大小变大一点(然而现在带宽很便宜)。

如果你想在服务器端保留 View 状态,那么你应该渲染单个ajax表单中的其他表单,以便它们的 View 状态也将更新:

<h:form id="A">
<h:commandButton value="A">
<f:ajax render="@form :B :C"/>
<h:commandButton>
<h:form>

<h:form id="B">
<h:commandButton value="B">
<f:ajax render="@form :A :C"/>
<h:commandButton>
<h:form>

<h:form id="C">
<h:commandButton value="C">
<f:ajax render="@form :A :B"/>
<h:commandButton>
<h:form>

关于ajax - JSF 2 View Expired Weirdest Bug(更新 - 仅在将状态保存到服务器时发生),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7555051/

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