Использование 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 без потери уже введенных данных. Следовательно, я ожидаю, что вкладки SUBTAB1
или SUBTAB2
станут отображаться в зависимости от того, какое значение выбрано в <h:selectOneMenu>
.
То, что я получаю: TabPanel перерисовывается, обрабатывается соответствующий SUBTAB, но данные, введенные на первой вкладке, теряются.
Как я могу визуализировать эти вкладки, не теряя уже введенные данные? Я попытался переписать определенные вкладки, но не стал их визуализировать (я полагаю, это влияет только на их содержимое).
Заранее спасибо.
Примечание. Все задействованные бобовые являются сессионными.
Я представил аналогичный вопрос два дня назад. Я удалил его, потому что думал, что проблема связана с ошибками дизайна, но это не так. Извините за удаление вопроса. – jmrodrigg
Похоже, у вас есть запрос с управляемым bean-компонентом для выполнения задачи. Вы можете изменить его на сеанс или оставьте его по запросу и назначьте аннотацию тега @ @ KeepAlive для вашего управляемого компонента bean-класса: '@KeepAlive public class MyBean {...}' –