目前我们正在尝试从 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 的新实例并且什么都不做(要么在每次通话时破坏以前的通话,要么在第一次通话时创建新通话然后什么也不做)。该问题可以通过仅重新渲染表单内的组件来解决,如下所示(更新innerDiv1
和innerDiv2
):
<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 2.0 像在 JSF 1.2 中一样使用第一种方法正确更新页面的一部分?
编辑:看起来表单渲染的问题是我使用的richfaces 4.2问题a4j:ajax
(其后继者a4j:support
与richfaces 3.3.3一起使用)和基于rich:commandButton
. 当我用本机 jsf 的表单替换它们时,f:ajax
似乎正确刷新了它们。但是外部 div 的问题仍然存在