Вы можете использовать -TemplateParameterUri
и -TemplateUri
и давать общедоступные URL-адреса, где хранятся шаблоны.
Решением, которое я в итоге выбрал, был пользовательский рендер, связанный с t: datatable (расширение томагавка до datatable)
public class HtmlMultiHeadTableRenderer extends HtmlTableRenderer
Мне пришлось переопределить только один метод
protected void renderFacet(FacesContext facesContext,
ResponseWriter writer, UIComponent component, boolean header)
, в котором я искал фасеты с именами header, header2, header3 ... headerN (я перестаю искать, как только отсутствует один), и то же самое с нижним колонтитулом. Это позволило мне сделать код, подобный
<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 на основе групп) для кодирования и документирования,
Как сказал Макдауэлл, 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>
Вы также можете использовать другие теги, кроме outputText, в PanelGrid, чтобы получить любой эффект, который вы ищете (просто убедитесь, что вы обернули их в 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 .
(Фасеты должны иметь уникальные имена (они хранятся в карте фасетов ).)
Два способа сделать это весной: