validation - 仅当验证通过时才使用 ajax 有条件地渲染组件

标签 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,因为如果验证失败,这会使片段在 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/

相关文章:

jsf - 在复合上使用新的 xmlns.jcp.org 命名空间会导致 java.util.concurrent.ConcurrentHashMap.putIfAbsent 处的 java.lang.NullPointerException

java - JavaEE 中的购物车困境

html - 如何指定用户必须插入输入字段的确切位数?

支持 bean 中的 javax.el.PropertyNotFoundException

jsf - @ManagedBean和@XxxScope可以放在基类中吗?

java - 如何显示 <h :selectOneMenu> in a <h:outputText>? 的选定值的标签

jsf-2 - java.lang.NullPointerException : Argument Error: Parameter id is null 异常

css 验证错误 moz 绑定(bind)?

javascript - 文本框的按键限制为小数点后两位?

jQuery 美国货币验证正则表达式也允许整数