跳至下一个<p:wizard>选项卡而不进行验证</p:wizard>

时间:2013-01-24 10:25:08

标签: validation jsf jsf-2 primefaces wizard

我正在使用<p:wizard>几个标签。某些选项卡包含需要验证的输入,例如信用卡号。但是可以跳过整个选项卡。如何跳到下一个标签?

我正在考虑2个实现,但我不确定如何:

  1. 添加一个跳过按钮,该按钮将转到下一个标签而不验证当前。

    <p:commandButton process="@this" immediate="true" onclick="wiz.next();" value="#{msgs['action.skip']}"></p:commandButton>
    
  2. 向导。

    <p:wizard widgetVar="wiz" flowListener="#{accountActivationController.onFlowProcess}" nextLabel="#{msgs['action.next']}" backLabel="#{msgs['action.back']}">
        <p:tab id="tabProfile">     
                //...
        </p:tab>
        <p:tab id="tabAddress">     
            <p:panel>
                <p:inputText id="shippingZipCode_OTHERS" value="#{accountActivationController.shippingAddress.postCode}">
                </p:inputText>
                <p:message for="shippingZipCode_OTHERS" />      
                <p:messages id="globalAddress" showDetail="true">
                </p:messages>
                <f:facet name="footer">
                    <div class="buttons-set">
                        <p:commandButton process="@this" value="#{msgs['action.skip']}" oncomplete="wiz.next();">
                        </p:commandButton>
                    </div>
                </f:facet>
            </p:panel>
        </p:tab>
        <p:tab id="tabSchool">  
                //....  
                <p:commandButton action="#{bean.submit} value="Submit" />
        </p:tab>
    </p:wizard>
    

    似乎process似乎不适用于此部分。 onclick,oncomplete on p:commandButton不会改变任何内容。

    目标是当按下跳过按钮时,不应触发表单验证,但我仍在尝试弄清楚如何执行此操作。

    1. 添加一个“跳过”复选框,该复选框将禁用该特定选项卡上的验证。

2 个答案:

答案 0 :(得分:1)

经过几个小时的测试,我已经证实了kolossus所说的是真的。 primefaces向导不支持选择性处理组件,它总是验证特定选项卡上的所有字段。

在我的情况下,我只检查必填字段,所以我所做的是删除所有必需的字段验证器,因此当我单击“跳过”按钮时,它应该导航到下一个选项卡。当我单击Next按钮时,onFlowListener事件内部手动验证所有必需的字段。

这样的事情:

public String onFlowProcess(FlowEvent event) {
    if (event.getOldStep().equals("tabAddress")) {
        if (skipToNext) {
            skipToNext = false; 
            return event.getNewStep();
        }
        if (StringUtils.isBlank(shippingAddress.getCountryCode())
                || StringUtils.isBlank(shippingAddress.getPostCode())
                || StringUtils.isBlank(shippingAddress.getState())
                || StringUtils.isBlank(shippingAddress.getAddress1())) {            
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, null, "ERROR Address")));
            return event.getOldStep();
        }       
    }
}

答案 1 :(得分:-1)

客户端API:

转移到&#34; n&#34;标签

onclick="PF('wiz').loadStep (PF('wiz').cfg.steps [n], true);  "

从0到m且n> o和n&lt;米 m =标签数量