使用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而不会丢失已经引入的数据。因此,我希望标签SUBTAB1
或SUBTAB2
会根据<h:selectOneMenu>
中选择的值进行渲染。
我得到的内容:tabPanel被重新调整,适当的SUBTAB会被渲染,但第一个标签中引入的数据会丢失。
如何在不丢失已经引入的数据的情况下呈现这些标签?我试过reRender特定的标签,但它不会让它们变成渲染(我想它只影响它们的内容)。
提前谢谢。
注意:所涉及的所有bean都是会话作用域。
答案 0 :(得分:1)
问题是输入值未在服务器上处理。
从ajaxSingle="true"
删除a4j:support
,以便在selectOneMenu值更改时处理整个表单。您可以使用process
属性来限制提交的区域(如果您不想处理整个表单)。
ajaxSingle
限制JSF树处理(解码,转换,验证和模型 更新)仅限于发送请求的组件。布尔。默认 价值是“假”。