JSF 2:如果验证失败则停止渲染

JSF 2: Stop rendering if validation fails

我正在使用 primefaces。

我有一个表单和一个带有 lazyModel 的数据表,在数据表中我显示了搜索输入数据后找到的结果。

每当我按下 "Search" 按钮时,我都需要在我的 bean 端进行一些验证,并且在验证失败的情况下,我不想重新呈现我的数据表,因为如果我执行此操作,然后它会使用错误的输入值向数据库发起新查询,并且会丢失以前的结果。

<h:form>
  <!-- Here I have a bunch of inputTexts -->
  <h:commandButton value="Search">
        <p:ajax process="@form" update="@form" listener="#{myBean.search}"/>
  </h:commandButton>

  <p:dataTable id="myResults" var="item" value="#{myBean.lazyModel}" lazy="true">
       <!-- Rows of my dataTable -->
  </p:dataTable>
<h:form>

在我的 bean 中我有类似下一个代码的东西(当然它比那更复杂,否则我将创建一个 JSF 验证器:

public void search() {
    // test validation
    if (myService.validateData(this.value1, this.value2, this.value3) and this.value4 == false) {
        MuMessageUtils.setFacesErrorMessage("validation.error.1");
        // I don't want to refresh my dataTable
    }
    // everything ok
    else {
        // I want to refresh my dataTable

        // do more stuff with the data
    }
}

我能否在验证失败时检测到并停止附加到“搜索”按钮的 ajax 事件的更新过程,或者如果验证失败甚至不处理所有表单?

谢谢。

您可以使用 PrimeFaces RequestContext 在您的侦听器方法中以编程方式更新。只有在验证成功时才会调用该方法,因为如果验证失败,则会跳过调用应用程序阶段。

import org.primefaces.context.RequestContext;

RequestContext.getCurrentInstance().update("form_client_id");

更新您在 p:ajax 中的输入,以便突出显示失败的输入字段。

<p:ajax process="@form" update="inputs" listener="#{myBean.search}"/>

("inputs"这里是为了演示目的,我不知道在那里指定什么,因为实际输入没有张贴在问题中。)