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 而不会丢失已经引入的数据。因此,我希望选项卡SUBTAB1SUBTAB2根据在<h:selectOneMenu>.

我得到了什么: tabPanel 被重新渲染,适当的 SUBTAB 被渲染,但在第一个选项卡中引入的数据丢失了。

如何在不丢失已经引入的数据的情况下呈现这些选项卡?我试图重新渲染特定的选项卡,但它不会使它们变得渲染(我想它只会影响它们的内容)。

先感谢您。

注意:所有涉及的 bean 都是 Session 范围的。

4

1 回答 1

1

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

ajaxSingle

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

于 2013-03-14T00:04:13.550 回答