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"这里是为了演示目的,我不知道在那里指定什么,因为实际输入没有张贴在问题中。)
我正在使用 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"这里是为了演示目的,我不知道在那里指定什么,因为实际输入没有张贴在问题中。)