我用rich:datatable 和rich:column 为可扩展列/行创建了一个简单的解决方案,类似于:Best way to make an expandable/collapsible subTable with 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>
当您单击详细信息框时,这会提供一个带有展开列的表格,详细信息列呈现在实际行下方。支持 bean 上的 expandAllAction 只是迭代行并将它们的扩展属性设置为与支持 bean 中的相同,从而扩展/取消扩展所有行。
然而,这在 Internet Explorer(IE7 或 IE8)上不能正常工作,尽管它适用于 FF 和 Chrome。如果用户单击复选框,则在他单击页面上的任何其他位置之前不会呈现任何内容。支持 bean 和对象正在更新,但在单击其他元素之前不会重新渲染。
这又是 IE 的问题还是只是 Richfaces 的错误?我在 IE 和 tbody 上发现了一些类似的问题,但应该已经修复了。我可以提交错误报告,但在那之前,有什么简单的解决方法吗?
Richfaces 版本是 3.3.1,它在 Jboss 4.2.1GA 和捆绑的 Sun RI 上运行。