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

时间:2015-06-03 10:56:36

标签: ajax jsf-2 primefaces

我正在使用primefaces。

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

每当我按下“搜索”按钮时,我需要在bean端进行一些验证,并且在验证失败的情况下我不想重新渲染我的dataTable,因为如果我这样做,那么它将使用错误的输入值向数据库启动新查询,它将丢失先前的结果。

<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事件中停止更新过程,如果验证失败,甚至不会处理所有表单?

感谢。

1 个答案:

答案 0 :(得分:1)

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

import org.primefaces.context.RequestContext;

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

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

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

(这里的“输入”用于说明目的,我不知道在那里指定什么,因为实际输入没有在问题中发布。)

相关问题