reRender rich:tabPanel不丢失数据

时间:2013-03-13 16:27:57

标签: java jsf richfaces jsf-1.2 ajax4jsf

使用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>中选择一个值。在那之后,期望的行为(我想要实现的)是reRender tabPanel而不会丢失已经引入的数据。因此,我希望标签SUBTAB1SUBTAB2会根据<h:selectOneMenu>中选择的值进行渲染。

我得到的内容:tabPanel被重新调整,适当的SUBTAB会被渲染,但第一个标签中引入的数据会丢失。

如何在不丢失已经引入的数据的情况下呈现这些标签?我试过reRender特定的标签,但它不会让它们变成渲染(我想它只影响它们的内容)。

提前谢谢。

注意:所涉及的所有bean都是会话作用域。

1 个答案:

答案 0 :(得分:1)

问题是输入值未在服务器上处理。 从ajaxSingle="true"删除a4j:support,以便在selectOneMenu值更改时处理整个表单。您可以使用process属性来限制提交的区域(如果您不想处理整个表单)。

  

ajaxSingle

     

限制JSF树处理(解码,转换,验证和模型   更新)仅限于发送请求的组件。布尔。默认   价值是“假”。