rich:datatableとrich:columnを使用して拡張可能な列/行のシンプルなソリューションを作成しました。これは次のようになります。rich :dataTableを使用して拡張可能/折りたたみ可能なsubTableを作成する最良の方法
ファセットコードは次のように(簡略化されて)います:
<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>
これにより、詳細ボックスをクリックすると列が展開されたテーブルが提供され、詳細列が実際の行の下に表示されます。バッキングBeanのexpandAllActionは、行を反復処理し、それらの拡張属性をバッキングBeanの場合と同じに設定するため、すべての行が拡張/非拡張されます。
ただし、これはInternet Explorer(IE7またはIE8)では正しく機能しませんが、FFおよびChromeでは機能します。ユーザーがチェックボックスをクリックすると、ページ上の他の場所をクリックするまで何もレンダリングされません。バッキングBeanとオブジェクトは更新されていますが、他の要素がクリックされるまで再レンダリングされません。
これはIEで再び邪悪なものですか、それともRichfacesのバグですか?IEとtbodyで同様の問題がいくつか見つかりましたが、修正されているはずです。バグレポートを提出することはできますが、それまでは簡単な回避策はありますか?
Richfacesのバージョンは3.3.1であり、Jboss4.2.1GAおよびバンドルされたSunRIで実行されます。