如果字段评估失败,如何保持相同的选项卡

时间:2015-02-17 15:51:09

标签: jsf primefaces tabs

我有主页标签和验证标签。如果用户输入有效,我想验证用户输入并切换回主页选项卡,否则保持在验证选项卡上。此时,单击提交按钮后,即使用户输入无效,也会切换回主页选项卡。

的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

1 个答案:

答案 0 :(得分:3)

您的提交按钮上有ajax="false"。由于您不使用tabView的activeIndex,因此它将始终切换回第一个选项卡。 使用ajax =“true”(默认值)而不是false。删除ajax =“false”时,它应该保留在您所在的选项卡上。另外,请确保为您的标签添加一个widgetVar,如

<p:tabView widgetVar="tabWidget">
    ...
</p:tabView>

您有两种选择:

  1. 在commandButton的oncomplete事件中,检查validationErrors,如果没有,请切换到第一个选项卡

    <p:commandButton value="Submit"
        actionListener="#{controller.saveA}"
        icon="ui-icon-check" validateClient="true" style="float-right"
        oncomplete="if (args &amp;&amp; !args.validationFailed) tabWidget.select(0);"
    />
    

    了解逃避&amp;的原因。 :Keep p:dialog open when a validation error occurs after submit

  2. 您还可以使用以下事实:如果您的侦听器被调用,您知道验证成功了。所以在监听器中你可以使用remoteContext并使其执行tab开关

    RequestContext.getCurrentInstance().execute("tabWidget.select(0)");