如何在p:datatable中显示垂直和水平标题?

时间:2013-04-18 07:21:37

标签: jsf jsf-2 primefaces datatable

我正在尝试使用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访问的资源包。如何定义每行显示哪些值?

有人能指出我正确的方向吗?感谢。

1 个答案:

答案 0 :(得分:0)

在JSF中有一种向数据表和列添加页眉(和页脚)的“标准”方法。这适用于标准和PrimeFaces组件。您必须将名称为header(或footer)的构面添加到p:dataTablep: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 showcasePrimeFaces 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>