6

アクションを実行した後(エラーメッセージなどを表示するため)、p:tabViewを更新する必要があります。

検証するフィールドはさまざまなタブにあります。tabView全体を更新する場合、これはもちろんバグのある動作です。PrimeFacesでは非表示のタブを更新しないでください(編集フィールドが非表示であり、更新されると、値が失われるためです。たとえば、p:autoCompleteはnull)。

したがって、アクティブなタブのみを更新する必要がありますが、commandButtonのupdate属性を使用して、p:tabView全体ではなく、アクティブなタブのみをターゲットにする方法はありますか?

4

1 に答える 1

5

私は短い例を作りました:

<h:form id="form">
    <p:tabView id="tabview">
        <p:tab title="tab 1">
            <p:commandButton value="update" update="@parent" />
        </p:tab>
        <p:tab title="tab 2">
            <p:outputPanel id="tab2">
                <p:commandButton value="update" update=":form:tabview:tab2" />
            </p:outputPanel>
        </p:tab>
    </p:tabView>
</h:form>

p:tabただし、 ID または (タブ 1 のように) を使用して更新すると@parent、タブ (div) が削除され、奇妙になります... 回避策は、タブ 2 で行ったように、タブのコンテンツをコンテナーにラップすることです.


はっ!タブを直接更新できない理由を見つけました: https://code.google.com/p/primefaces/issues/detail?id=3518

タブビューの外にあるボタンの例:

<h:form id="form">
    <p:tabView id="tabview" binding="#{tabView}">
        <p:ajax event="tabChange" update=":form:button" />
        <p:tab title="tab 1">
            <p:outputPanel id="tab0">
                <p:panel>text</p:panel>
            </p:outputPanel>
        </p:tab>
        <p:tab title="tab 2">
            <p:outputPanel id="tab1">
                <p:panel>text</p:panel>
            </p:outputPanel>
        </p:tab>
    </p:tabView>
    <p:commandButton id="button" value="update"
        update=":form:tabview:tab#{tabView.activeIndex}" />
</h:form>
于 2013-01-09T13:54:03.927 に答える