1

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

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

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

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

魔法师。

<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. 添加一个复选框“跳过”,这将禁用该特定选项卡上的验证。
4

2 回答 2

2

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

就我而言,我只检查必填字段,所以我所做的是删除所有必填字段验证器,因此当我单击“跳过”按钮时,它应该导航到下一个选项卡。当我单击下一步按钮时,在 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();
        }       
    }
}
于 2013-01-26T08:45:05.797 回答
-1

客户端 API:

移动到“n”选项卡

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

从 0 到 m 并且 n > o 和 n < m m = 选项卡数

于 2018-03-14T02:12:46.577 回答