Я создал простое решение для расширяемых столбцов / строк с помощью rich: datatable и rich: column, которое похоже на: Лучший способ создать расширяемую / складываемую подтаблицу с rich: dataTable
Код Facelets (упрощенно) выглядит следующим образом:
<rich:dataTable id="detailtable"
value="#{bean.model}"
var="row"
columns="2">
<rich:column id="detail-check">
<f:facet name="header">
<h:selectBooleanCheckbox value="#{bean.expandAll}">
<a4j:support event="onchange" action="#{bean.expandAllAction}"
reRender="detailtable" />
</h:selectBooleanCheckbox>
</f:facet>
<h:selectBooleanCheckbox value="#{row.expanded}">
<a4j:support event="onchange" reRender="detailtable" />
</h:selectBooleanCheckbox>
</rich:column>
<!-- actual data column -->
<rich:column id="detail-column"
rendered="#{row.expanded}"
breakBefore="true"
colspan="2">
<!-- detail column content -->
</rich:column>
</rich:dataTable>
Это обеспечивает таблицу с расширенным столбцом, когда вы щелкаете мышью на поле сведений, столбец сведений отображается ниже фактической строки. expandAllAction на базовом компоненте просто перебирает строки и устанавливает их расширенный атрибут таким же, как в базовом компоненте, расширяя / расширяя все строки.
Однако это не работает корректно с Internet Explorer (IE7 или IE8), хотя работает с FF и Chrome. Если пользователь нажимает на флажок, ничего не отображается, пока он не щелкнет в любом другом месте на странице. Поддерживающий компонент и объекты обновляются, но повторный рендеринг не выполняется, пока не будет нажат какой-либо другой элемент.
Это опять что-то нехорошее с IE или просто ошибка с Richfaces? Я нашел похожую проблему с IE и tbody, но она должна была быть исправлена. Я могу подать отчет об ошибке, но до этого есть ли простой обходной путь?
Версия Richfaces - 3.3.1, она работает на Jboss 4.2.1GA и в комплекте Sun RI.