Я работаю над приложением, которое в основном является специализированным инструментом администрирования базы данных.
Структура страницы в основном следующая:
<a4j:region>
<h:selectOneMenu value='#{bean.selectedTable}'>
...
<a4j:ajax event='change' render='tablePanel'/>
</h:selectOneMenu>
<a4j:outputPanel id='tablePanel'>
<rich:extendedDataTable id='table' selection='#{bean.selectedRows}' ...>
<f:facet name='header'>
[datascroller etc.]
<a4j:commandButton action='#{bean.deleteSelectedRows}' execute='@region' render='tablePanel'/>
</f:facet>
[columns]
</rich:extendedDataTable>
</a4j:outputPanel>
<a4j:region>
selectOneMenu используется для выбора таблицы базы данных. Основным компонентом является область запроса и он настроен на выбор первой доступной таблицы по умолчанию при ее инициализации. Я использую подкласс ExtendedDataTable для разбивки данных в базе данных.
Когда я нажимаю commandButton, чтобы удалить строки, кажется, что компонент extendedDataTable определяет выбранные строки / до /, к которым применяется значение bean.selectedTable. Это означает, что независимо от того, какая таблица выбрана в раскрывающемся меню, RichFaces сообщает мне, что выбранные строки являются некоторыми (более или менее произвольными) строками в таблице базы данных по умолчанию.
Я проверил, что это проблема упорядочения, когда вызывается deleteSelectedRows (), значение selectedTable является правильным. Я использую Richfaces 4 M6 и a4j: похоже, что keepAlive больше не существует для сохранения состояния компонента.
Есть ли способ сообщить RichFaces / JSF, в каком порядке делать эти вещи? Я попытался использовать немедленный = "true" для h: selectOneMenu, но это не помогло.
Кроме того, после удаления tablePanel, похоже, не перерисовывается, тогда как другой a4j: commandButton, который добавляет новые записи с такими же атрибутами execute и render, кажется, работает нормально. Есть ли способ отладить состояние ajax-запросов / перехватов RichFaces через них?