使用JSF 1.2和3.3 RichFaces的,我有這樣的形式:重新呈現豐富:一個tabpanel而不會丟失數據
<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進行reRender。因此,我預計標籤SUBTAB1
或SUBTAB2
將根據在<h:selectOneMenu>
中選擇的值而呈現。
我得到了什麼:tabPanel被重新渲染,合適的SUBTAB被渲染,但第一個選項卡中引入的數據丟失。
如何渲染這些選項卡而不會丟失已經引入的數據?我試着重新調整特定的標籤,但不讓它們呈現(我認爲它隻影響到它們的內容)。
預先感謝您。
注意:所涉及的所有bean都是會話作用域。
兩天前我提交了一個類似的問題。我刪除了它,因爲我認爲這個問題是由於設計錯誤造成的,但事實並非如此。對不起,刪除了這個問題。 – jmrodrigg 2013-03-13 16:29:12
看起來您有一個請求作用域管理bean來執行任務。您可以將其更改爲會話作用域或將其留在請求作用域,並將'@ KeepAlive'標記註釋分配給託管的Bean類:'@KeepAlive public class MyBean {...}' – 2013-03-13 21:44:39