我正在尝试使用JSF 2.1.7和Primefaces 3.3.1显示一个包含垂直和水平标题的表。
这基本上就是我想做的事情:
<table>
<thead>
<tr>
<th></th>
<th>Hor 1</th>
<th>Hor 2</th>
</tr>
</thead>
<tbody>
<tr>
<th>vert 1</th>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
<tr>
<th>vert 2</th>
<td>row 2, cell 1</td>
<td>row 2, cell 2</td>
</tr>
</tbody>
</table>
这是我成功实现的最佳目标:
<p:dataTable value="#{ctrl.values}" var="val">
<p:column styleClass="ui-state-default">
<h:outputText value="Vertical header" />
</p:column>
<p:column headerText="Horizontal header">
<h:outputText value="#{val.anything}"/>
</p:column>
</p:dataTable>
ui类将我的单元格设置为标题,这对我来说已经足够了(没有行选择或过滤)。但是我还有一个问题:在这个示例中应该替换“Vertical header”的标题文本来自通过EL访问的资源包。如何定义每行显示哪些值?
有人能指出我正确的方向吗?感谢。
答案 0 :(得分:0)
在JSF中有一种向数据表和列添加页眉(和页脚)的“标准”方法。这适用于标准和PrimeFaces组件。您必须将名称为header
(或footer
)的构面添加到p:dataTable
或p:column
- 具体取决于您是否要为表格添加页眉(或页脚)本身或专栏。
使用PrimeFaces,列更简单。只需在headerText
上添加属性footerText
(或p:column
。
请参阅以下示例:
<p:dataTable var="person" value="#{bean.persons}">
<f:facet name="header">
Persons
</f:facet>
<p:column>
<f:facet name="header">
Name
</f:facet>
<h:outputText value="#{person.name}"/>
</p:column>
<p:column headerText="Email">
<h:outputText value="#{person.email}"/>
</p:column>
</p:dataTable>
但我不知道是否可以为行添加“标题”。
有关详细信息,请参阅PrimeFaces showcase或PrimeFaces 3.3 user guide。
如果你需要来自每行资源包的不同文本,我会用Java代码加载文本并将它们添加到数据表中显示的对象中。只需创建一个新类,它扩展/ delgates到/您要显示的原始类,并添加一个属性headerLabel
(来自资源包的值)。然后你可以做这样的事情:
<p:dataTable var="person" value="#{bean.personsWithLabels}">
<p:column>
<h:outputText value="#{person.headerLabel}"/>
</p:column>
...
</p:dataTable>