我想知道是否有任何方法可以在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)进行编码和记录,

08-26 15:36
查看更多