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 はセッション スコープです。