Java JSF数据表中的多个页脚行
我想知道是否有办法在一个h:dataTable(或t:dataTable)中有多个页脚行,我想做这样的事情(不编译)Java JSF数据表中的多个页脚行,java,jsf,datatable,Java,Jsf,Datatable,我想知道是否有办法在一个h:dataTable(或t:dataTable)中有多个页脚行,我想做这样的事情(不编译) 标题 第一页脚 新tr中的第二个页脚 结果是这样的 <table border=1 style="border:1px solid"> <thead><tr><th>Header</th></tr></thead> <tbody><tr><td>Data V
标题
第一页脚
新tr中的第二个页脚
结果是这样的
<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>
标题
数据值1
数据值2
数据值。。。
数据值n
第一页脚
新tr中的第二个页脚
你有什么想法可以最好地做到这一点吗?
谢谢
编辑:
如果我可以避免使用自定义控件/自定义渲染器,那就太好了(facet必须有唯一的名称(它们存储在一个数据库中)
今年春天有两种方法可以让你记住:
正如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>
第一页脚
新tr中的第二个页脚
您也可以在panelGrid中使用outputText以外的标记来获得所需的任何效果(只需确保将它们包装在panelGroup或类似的内容中即可)。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构建一个常规表。我最终使用的解决方案是一个与t:datatable(datatable的tomahawk扩展)关联的自定义呈现程序 我只需要重写一个方法
protected void renderFacet(FacesContext facesContext,
ResponseWriter writer, UIComponent component, boolean header)
我在其中查找名为header、header2、header3的facet。。。船头(我一缺一个就不看了),船尾也一样。这让我可以像这样编写代码
<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>
标题
第二个Tr与th的
第一页脚
新tr中的第二个页脚
这花了大约一天的时间(还有一些其他扩展,比如允许基于组的colspan)来编写代码和文档,我无法使用自定义的呈现程序,所以我在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>
泽特
长篇大论
斑铜矿
奥斯拉斯顿
Gesamtausalastong
#{trafficClass.name}
#{trafficClass.name}
#{trafficClass.name}
... 柱。。。
标题方面打开一个
,我立即用输出文本将其关闭,并在最后再次打开以获得有效的html。通过这种方式,在自定义头前后都会得到一个空的
,但在我的情况下,这是可以接受的。我希望避免使用自定义组件,因为datatable非常接近我需要的。我已经开始使用CSS来设计一些类似的东西,但它非常粗糙。我希望有人能指出我遗漏了什么。该死的,谢谢你的回答,我希望页脚和主体使用相同的表格。我目前正在使用自定义渲染器来实现这一点。我会在完成后发布详细信息。谢谢你的回答,很遗憾我们没有使用该库。大卫,你能帮我吗
<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>
<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>