【问题标题】:How to check in after phase of Validations phase if validation has failed?如果验证失败,如何在验证阶段之后签入?
【发布时间】:2012-02-03 07:39:54
【问题描述】:

我写了一个PhaseListener,在其中我正在检查验证阶段。有没有一种方法可以让我在侦听器的afterPhase() 方法中检查验证是否失败,验证阶段之后的下一阶段将是渲染响应阶段。

【问题讨论】:

    标签: java validation jsf


    【解决方案1】:

    如果您使用的是 JSF 2.0,只需使用 FacesContext#isValidationFailed() 进行检查。

    if (context.isValidationFailed()) {
        // Validation has failed.
    }
    

    您也可以在视图侧检查它,如下所示:

    <h:panelGroup rendered="#{facesContext.validationFailed}">
        <p>Validation has failed.</p>
    </h:panelGroup>
    

    【讨论】:

      【解决方案2】:

      对 FacesContext 中的错误使用最大严重性

      Severity maximumSeverity = FacesContext.getCurrentInstance().getMaximumSeverity();
      boolean validationFailed=false;
      if (maximumSeverity != null
              && (maximumSeverity==FacesMessage.SEVERITY_ERROR || maximumSeverity
                  ==FacesMessage.SEVERITY_FATAL)) {
          validationFailed=true;
      }
      

      如果validationFailed 的值为true,则存在一些错误消息。

      【讨论】:

        【解决方案3】:

        使用 FacesContext 怎么样,你能检查是否有任何排队的消息吗?例如。

        FacesContext context = FacesContext.getCurrentInstance();
        Iterator<FacesMessage> messages = context.getMessages();
        

        希望有帮助。

        【讨论】:

        • 这正是我现在正在做的,FacesContext.getCurrentInstance().getMaximumSeverity != null,谢谢 :)
        • 如果您有自己的验证器可以将 INFO 或 WARNING 消息加入队列,那么您可能不得不忽略它。
        猜你喜欢
        • 2020-08-03
        • 1970-01-01
        • 1970-01-01
        • 2021-12-17
        • 1970-01-01
        • 2015-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多