只有在验证通过时才有条件地渲染 ajax 的组件
Conditionally render components with ajax conditionally only if validation passes
我正在使用 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()
。如果在当前的 JSF 生命周期中验证失败,它将 return true
。 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>
组件,具体取决于最终标记。
另请参阅:
- Why do I need to nest a component with rendered="#{some}" in another component when I want to ajax-update it?
我正在使用 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()
。如果在当前的 JSF 生命周期中验证失败,它将 return true
。 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>
组件,具体取决于最终标记。
另请参阅:
- Why do I need to nest a component with rendered="#{some}" in another component when I want to ajax-update it?