使用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