我正在使用JSF2.2,我想知道是否有一种方法,只有在验证通过时,才有条件地使用ajax呈现组件。通过使用ajax的render属性,不管验证通过与否,组件都将呈现出来。我想要的是:
<f:ajax ... render="#{validationHasPassed ? 'foo' : ''}" />
...
<h:panelGroup id="foo">
<!-- other components here -->
</h:panelGroup>
是否有可能以类似的方式有条件地呈现组件?在我的示例中,我不希望在片段中使用呈现的属性,并将其设置为true或false,因为如果验证失败,则该片段在DOM中根本不存在。我可能有特定的css样式,例如在panelGroup内部的组件中,这些组件是在与页面交互后通过jQuery获得的,如果验证失败,我不希望呈现该部分,这样它就可以保持当前的可视状态。
发布于 2015-05-31 08:18:32
您可以使用FacesContext#isValidationFailed()
。如果验证在当前JSF生命周期中失败,它将返回true
。FacesContext
的当前实例也可以作为#{facesContext}
在EL中使用。
只需在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>
组件,这取决于最终的标记。
另请参阅:
https://stackoverflow.com/questions/30548586
复制相似问题