我正在使用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获取的,如果验证失败,我不想渲染该部分,以便它可以保持在当前的可视状态。
答案 0 :(得分:2)
您可以使用FacesContext#isValidationFailed()
。如果当前JSF生命周期中的验证失败,它将返回true
。 FacesContext
的当前实例在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>
组件。