0

JSF 1.2 と Richfaces 3.3 を使用すると、次の形式になります。

<h:form>
    <rich:tabPanel switchType="client" id="tabPnl">
        <rich:tab label="MAIN_TAB">
            <h:outputText value="#{msg.date}"/>
            <rich:calendar value="#{MyBean.date}">
                <f:validator validatorId="CalendarValidator" />
            </rich:calendar>
            <h:message for="DataInici" errorClass="error" />

            <h:outputText value="#{msg.selector}"/>
            <h:selectOneMenu id="select_val" value="#{MyBean.selectedItem}">
                <f:selectItem itemLabel="#{msg.select_value}" itemValue="-1" />
                <f:selectItems value="#{MyBean.listOfItems}" />
                <f:validator validatorId="NumSelValidator" />
                <a4j:support event="onchange" reRender="tabPnl" ajaxSingle="true" />
            </h:selectOneMenu>
            <h:message for="select_val" errorClass="error" />
        </rich:tab>

        <rich:tab label="SUBTAB1" id="subtab1" rendered="#{MyBean.selectedItem == 1}">
            // form components such as inputText and/or SelectOneMenu.
        </rich:tab>

        <rich:tab label="SUBTAB2" id="subtab2" rendered="#{MyBean.selectedItem == 2}">
            // Other form components such as inputText and/or SelectOneMenu.
        </rich:tab>
    </rich:tabPanel>

    <h:commandButton value="#{msg.insert}" action="#{MyBean.insertData}">
</h:form>

最初は、SUBTAB1 と SUBTAB2 はデフォルト値MyBean.selectedItemが -1 であるためレンダリングされません。

まず、ユーザーは<rich:calendar>コンポーネントで日付を選択し、その後で値を選択します<h:selectOneMenu>。その後、目的の動作 (私が達成したいこと) は、既に導入されたデータを失うことなく tabPanel を再レンダリングすることです。その結果、で選択した値に応じて、タブが表示されるか、レンダリングされると予想SUBTAB1されます。SUBTAB2<h:selectOneMenu>

私が得るもの:tabPanelが再レンダリングされ、適切なSUBTABがレンダリングされますが、最初のタブに導入されたデータは失われます。

すでに導入されているデータを失わずにこれらのタブをレンダリングするにはどうすればよいですか? 特定のタブを再レンダリングしようとしましたが、レンダリングされません (コンテンツにのみ影響すると思います)。

前もって感謝します。

注: 関連するすべての Bean はセッション スコープです。

4

1 に答える 1

1

問題は、入力値がサーバー上で処理されないことです。から削除ajaxSingle="true"してa4j:support、selectOneMenu の値が変更されたときにフォーム全体が処理されるようにします。属性を使用processして、送信された領域を制限できます (フォーム全体を処理したくない場合)。

ajaxシングル

JSF ツリーの処理 (デコード、変換、検証、およびモデルの更新) を、要求を送信するコンポーネントのみに制限します。ブール。デフォルト値は「false」です。

于 2013-03-14T00:04:13.550 に答える