我想知道是否有任何方法可以在h:dataTable(或t:datatable)中具有多个页脚行,但我想这样做(无法编译)
<h:dataTable ... var="row">
<h:column>
<f:facet name="header">
Header
</f:facet>
<h:outputText value="#{row.value}"/>
<f:facet name="footer">
FirstFooter
</f:facet>
<f:facet name="footer">
Second Footer in a new tr
</f:facet>
</h:column>
</h:dataTable>
结果像这样
<table border=1 style="border:1px solid">
<thead><tr><th>Header</th></tr></thead>
<tbody><tr><td>Data Value 1</td></tr>
<tr><td>Data Value 2</td></tr>
<tr><td>Data Value ...</td></tr>
<tr><td>Data Value n</td></tr>
</tbody>
<tfoot>
<tr><td>FirstFooter</td></tr>
<tr><td>Second Footer in a new tr</td></tr>
</tfoot>
</table>
任何想法如何最好地做到这一点?
谢谢。
编辑:
如果可以避免使用自定义控件/自定义渲染器,那就太好了
最佳答案
我最终使用的解决方案是与t:datatable(对datatable的战斧扩展)关联的自定义渲染器
public class HtmlMultiHeadTableRenderer extends HtmlTableRenderer
我只需要重写一种方法
protected void renderFacet(FacesContext facesContext,
ResponseWriter writer, UIComponent component, boolean header)
在其中寻找名称为header,header2,header3 ... headerN(一旦缺少一个就停止查找)的方面,与footer相同。这使我可以像
<h:dataTable ... var="row">
<h:column>
<f:facet name="header">
Header
</f:facet>
<f:facet name="header2">
A second Tr with th's
</f:facet>
<h:outputText value="#{row.value}"/>
<f:facet name="footer">
FirstFooter
</f:facet>
<f:facet name="footer2">
Second Footer in a new tr
</f:facet>
</h:column>
</h:dataTable>
这大约花了一天的时间(还有一些其他扩展,例如允许基于组的colspans)进行编码和记录,