2

我正在尝试使用 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 类将我的单元格设置为标题,这对我来说已经足够了(没有行选择或过滤)。但是我还有一个问题:在这个例子中应该替换“垂直标题”的标题文本来自通过 EL 访问的资源包。如何定义每行显示哪些值?

有人可以指出我正确的方向吗?谢谢。

4

1 回答 1

0

在 JSF 中,有一种向数据表和列添加页眉(和页脚)的“标准”方式。这适用于标准和 PrimeFaces 组件。您必须将名称为header(或footer)的构面添加到p:dataTablep:column- 取决于您是否希望为表本身或列添加页眉(或页脚)。

使用 PrimeFaces,列更简单。只需添加属性headerText(或footerTextp: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 展示PrimeFaces 3.3 用户指南

如果您需要每行中来自资源包的不同文本,我会在 Java 代码中加载文本并将它们添加到数据表中显示的对象中。只需创建一个新类,该类扩展/代理/代理您要显示的原始类并添加一个属性headerLabel(来自资源包的值)。然后你可以做这样的事情:

<p:dataTable var="person" value="#{bean.personsWithLabels}">  
  <p:column>  
    <h:outputText value="#{person.headerLabel}"/>
  </p:column>
  ...
</p:dataTable>
于 2013-04-18T07:47:45.083 回答