仅在验证通过

时间:2015-05-30 16:31:09

标签: validation jsf jsf-2.2 conditional-rendering

我正在使用JSF 2.2,我想知道是否有办法只有在验证通过时才有条件地使用ajax呈现组件。通过使用ajax的render属性,无论验证通过与否,都将呈现组件。 我所追求的是:

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

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

1 个答案:

答案 0 :(得分:2)

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

只需在rendered属性中进行检查,然后更新其父占位符组件即可。请注意,您无法有条件地呈现一个自身rendered属性设置的组件,否则JavaScript将无法找到并更新它。你的理论<f:ajax>尝试会以同样的方式失败。

E.g。

<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>组件。

另见: