gpt4 book ai didi

ajax - 如何在 JSF 2.0 中使用表单重新呈现页面的一部分?

转载 作者:行者123 更新时间:2023-12-04 15:14:23 27 4
gpt4 key购买 nike

目前我们正在尝试从 JSF 1.2 迁移到 JSF 2.0,我们面临的问题之一是无法重新呈现包含表单的页面的一部分。像这样(重新渲染 outerDiv 或形成自己):

<h:panelGroup id="outerDiv">
<h:form id="form1">...</h:form>
<h:form id="form2">...</h:form>
</h:panelGroup>

我的意思是,如果我更新 outerDiv一切都已更新,但表单(或多个表单)本身已损坏且行为异常,至少 ajax 调用要么在第一次触发时不起作用,要么不是调用某个 bean 的方法,而是创建该 bean 的新实例而不做任何事情(要么使用每次调用都销毁前一个调用,或者只是在第一次调用时创建一个新调用,然后什么都不做)。该问题可以通过仅重新渲染表单内的组件来解决,如下所示(更新 innerDiv1innerDiv2):
<h:panelGroup id="outerDiv">
<h:form id="form1">
<h:panelGroup id="innerDiv1">...</h:panelGroup>
</h:form>
<h:form id="form2">
<h:panelGroup id="innerDiv2">...</h:panelGroup>
</h:form>
</h:panelGroup>

但是我们有很多地方包含一些带有 ui:include 的页面并且查看该页面内部并更新那里的某些组件不是很方便。此外,我们必须修改所有这些页面,因为其中许多页面在表单中没有通用的包装 div,单独更新每个组件将非常麻烦且容易出错。
那么,是否可以像在 JSF 1.2 中那样使用第一种方法使 JSF 2.0 正确更新页面的一部分?

编辑:看起来表单渲染的问题是 Richfaces 4.2 问题,因为我使用 a4j:ajax (与 Richfaces 3.3.3 一起使用的 a4j:support 的后继者)和基于 rich:commandButton 的自定义按钮.当我用原生 jsf 替换它们时 f:ajax表单似乎已正确刷新。但是外部 div 的问题仍然存在

最佳答案

这与部分状态保存有关。如果您对一个组件进行 ajax 更新,而该组件又包含一个表单作为其子项之一,则其 View 状态将丢失。该表单中的每个第一个 ajax 请求都会失败,因为没有 View 状态。但是,如果该 ajax 请求正在重新呈现表单本身,那么它将起作用。
要解决此问题,您需要 明确在 ajax 中包含其他表单的 ID render/update outerDiv 旁边的属性每当它从另一种形式调用时。
例如。

<h:form>
<h:commandButton value="Update other forms">
<f:ajax render="outerDiv form1 form2" />
</h:commandButton>
</h:form>
<h:panelGroup id="outerDiv">
<h:form id="form1">...</h:form>
<h:form id="form2">...</h:form>
</h:panelGroup>
不,这不会导致具有重复组件的 ajax 响应。它只会触发 JSF 来准备和保存那些其他表单的状态。
也可以看看:
  • Communication in JSF 2.0 - Ajax rendering of content which contains another form
  • 关于ajax - 如何在 JSF 2.0 中使用表单重新呈现页面的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10031159/

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