我正在使用 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 内的组件中,并且我不想在验证失败时渲染该部分,以便它可以保持当前的视觉状态。
最佳答案
您可以使用 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>
,取决于最终的标记。
另请参阅:
关于validation - 仅当验证通过时才使用 ajax 有条件地渲染组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30548586/