我正在使用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事件中停止更新过程,如果验证失败,甚至不会处理所有表单?
感谢。
答案 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}"/>
(这里的“输入”用于说明目的,我不知道在那里指定什么,因为实际输入没有在问题中发布。)