我有主页标签和验证标签。如果用户输入有效,我想验证用户输入并切换回主页选项卡,否则保持在验证选项卡上。此时,单击提交按钮后,即使用户输入无效,也会切换回主页选项卡。
的index.xhtml
<p:tabView>
<p:tab title="Home" titleStyleClass="repo">
<h:panelGrid columns="2" cellpadding="10">
<h:form>
/****home table code here***/
</h:form>
</h:panelGrid>
</p:tab>
<p:tab title="Validation">
<h:form>
<h:panelGrid id="grid" columns="4" cellpadding="5">
<h:outputLabel for="number" value="number:" />
<p:inputText id="number" value="#{validationView.number}"
label="Number">
<f:validateDoubleRange minimum="100" maximum="200" />
</p:inputText>
</h:panelGrid>
<p:commandButton value="Submit"
actionListener="#{controller.saveA}" ajax="false"
icon="ui-icon-check" validateClient="true" style="float-right" />
</h:form>
</p:tab>
</p:tabView>
我确信,我在这里遗漏了一些东西,我不知道如何在primefaces中的特定选项卡上取回验证结果,并根据它设置标签切换。
*我正在使用primefaces 5.1
答案 0 :(得分:3)
您的提交按钮上有ajax="false"
。由于您不使用tabView的activeIndex
,因此它将始终切换回第一个选项卡。
使用ajax =“true”(默认值)而不是false。删除ajax =“false”时,它应该保留在您所在的选项卡上。另外,请确保为您的标签添加一个widgetVar,如
<p:tabView widgetVar="tabWidget">
...
</p:tabView>
您有两种选择:
在commandButton的oncomplete事件中,检查validationErrors,如果没有,请切换到第一个选项卡
<p:commandButton value="Submit"
actionListener="#{controller.saveA}"
icon="ui-icon-check" validateClient="true" style="float-right"
oncomplete="if (args && !args.validationFailed) tabWidget.select(0);"
/>
了解逃避&amp;的原因。 :Keep p:dialog open when a validation error occurs after submit
您还可以使用以下事实:如果您的侦听器被调用,您知道验证成功了。所以在监听器中你可以使用remoteContext并使其执行tab开关
RequestContext.getCurrentInstance().execute("tabWidget.select(0)");