2

我正在使用 JSF 2.2,我想知道是否有一种方法可以仅在验证通过时使用 ajax 有条件地呈现组件。通过使用 ajax 的 render 属性,无论验证是否通过,组件都将被渲染。我所追求的是这样的:

<f:ajax ... render="#{validationHasPassed ? 'foo' : ''}" />
...
<h:panelGroup id="foo">
          <!-- other components here -->
  </h:panelGroup>

是否可以以类似的方式有条件地渲染组件?在我的情况下,我不想在片段中包含渲染属性并将其设置为 true 或 false,因为如果验证失败,这会使片段在 DOM 中根本不存在。我可能有特定的 css 样式,例如在与页面交互后通过 jQuery 获取的 panelGroup 内的组件中,如果验证失败,我不想呈现该部分,以便它可以保持当前的视觉状态.

4

1 回答 1

2

你可以利用FacesContext#isValidationFailed(). true如果在当前 JSF 生命周期中验证失败,它将返回。的当前实例FacesContext在 EL 中也可以作为#{facesContext}.

只需在rendered属性中检查它并更新其父占位符组件。请注意,您不能有条件地渲染本身rendered属性设置为 JavaScript 的组件,否则将无法找到和更新它。你的理论<f:ajax>尝试也会以同样的方式失败。

例如

<f:ajax ... render="foo-holder" />
...
<h:panelGroup id="foo-holder">
    <h:panelGroup id="foo" rendered="#{not facesContext.validationFailed}">
        Validation has not failed.
    </h:panelGroup>
</h:panelGroup>

如有必要,添加layout="block"以使它们成为<div>组件而不是组件<span>,具体取决于最终标记。

也可以看看:

于 2015-05-31T08:18:32.143 回答