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この部分では機能していないようです。p:commandButton の onclick、oncomplete は何も変更しません。

目標は、スキップボタンが押されたときにフォームの検証がトリガーされないようにすることですが、私はまだそれを行う方法を見つけようとしています.

  1. その特定のタブでの検証を無効にするチェックボックス「スキップ」を追加します。
4

2 に答える 2

2

数時間のテストの後、コロッサスの言ったことは真実であることが確認されました。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 に答える