我想知道是否有任何方法在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>
任何想法如何最好地实现这一目标? 感谢。
编辑: 如果我可以避免使用自定义控件/自定义渲染器
那就太棒了答案 0 :(得分:5)
我最终使用的解决方案是与t:datatable相关联的自定义渲染器(数据表的tomahawk扩展名)
public class HtmlMultiHeadTableRenderer extends HtmlTableRenderer
我只需要覆盖一个方法
protected void renderFacet(FacesContext facesContext,
ResponseWriter writer, UIComponent component, boolean header)
在其中我查找了具有名称标题,标题2,标题3 ...标题的小平面(我只有一个缺失时我停止查看)和页脚相同。这让我可以做像
这样的代码<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)来编码和记录,
答案 1 :(得分:3)
正如McDowell所说,panelGrid会做你没有自定义控件的问题,除非我遗漏了什么。
<f:facet name="footer">
<h:panelGrid columns="1">
<h:outputText value="FirstFooter" />
<h:outputText value="Second Footer in a new tr" />
</h:panelGrid>
</f:facet>
这将呈现如下
<tfoot>
<tr>
<td colspan="3">
<table>
<tbody>
<tr>
<td>FirstFooter</td>
</tr>
<tr>
<td>Second Footer in a new tr</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tfoot>
你可以在panelGrid中使用除outputText之外的标签来获得你正在寻找的任何效果(只需确保将它们包装在panelGroup或类似的东西中)。
答案 2 :(得分:2)
Richfaces列具有breakBefore属性,允许您执行以下操作:
<f:facet name="footer">
<rich:column>
<h:outputText value="First Footer"/>
</rich:column>
<rich:column breakBefore="true">
<h:outputText value="Second Footer"/>
</rich:column>
</f:facet>
您正在使用的是什么,但遗憾的是没有使用您指定的库。
如果您正在使用Facelets,您可以随时使用 ui:repeat 构建常规表。
答案 3 :(得分:1)
(Facets必须具有唯一的名称(它们存储在facet map中)。)
有两种方法可以解决这个问题:
答案 4 :(得分:0)
我无法使用自定义渲染器,因此我使用JSF中的普通html进行了渲染:
<t:dataTable value="#{...}" var="...">
<f:facet name="header">
<h:outputText escape="false" value="</th></tr>"/>
<tr>
<th rowspan="2" class="tableHeaderLightGrey">
Zeit
</th>
<th colspan="#{filterController.trafficClass.size()}" class="tableHeaderLightGrey">
Verbrauch
</th>
<th colspan="#{filterController.trafficClass.size()}" class="tableHeaderLightGrey">
Bandbreite
</th>
<th colspan="#{filterController.trafficClass.size()}" class="tableHeaderLightGrey">
Auslastung
</th>
<th rowspan="2" class="tableHeaderLightGrey">
Gesamtauslastung
</th>
</tr>
<tr>
<c:forEach items="#{filterController.trafficClass}" var="trafficClass">
<th class="tableHeaderLightGrey">
#{trafficClass.name}
</th>
</c:forEach>
<c:forEach items="#{filterController.trafficClass}" var="trafficClass">
<th class="tableHeaderLightGrey">
#{trafficClass.name}
</th>
</c:forEach>
<c:forEach items="#{filterController.trafficClass}" var="trafficClass">
<th class="tableHeaderLightGrey">
#{trafficClass.name}
</th>
</c:forEach>
</tr>
<h:outputText escape="false" value="<tr><th>"/>
</f:facet>
... columns ...
</t:dataTable>
标题构面打开<tr><th>
,我用outpuut文本立即打开,然后在最后再打开以获得有效的html。你会在自定义标题之前和之后得到一个空的<tr><th></th></tr>
,但在我的情况下这是可以接受的。