java - 重新渲染丰富:tabPanel without losing data

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

我得到的内容:tabPanel 被重新渲染,相应的 SUBTAB 被渲染,但第一个选项卡中引入的数据丢失了。

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

提前谢谢您。

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

最佳答案

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

ajaxSingle

Limits JSF tree processing (decoding, conversion, validation and model updating) only to a component that sends the request. Boolean. Default value is "false".

关于java - 重新渲染丰富:tabPanel without losing data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15390991/

相关文章:

java - 使用 XML 文件 (log4j2.xml) 配置 Log4j 2

java - 向我展示使用Facelets的开源项目!

java - <rich :calendar> doesn't accept java. util.Calendar

javascript - 在 JSF 复合组件中集成 JavaScript,干净的方式

java - 将 HTML 超链接添加到 java 资源包属性文件

JSF 组合用户界面 :param with composite component

jsf - JSF/Seam/RichFaces 中有 “server-side comments” 吗?

java - JComboBox 中的 JTextArea 字体

java - 迭代嵌套(多维) HashMap

java - Java 9 编译器中的 --release 标志是什么?