2013-04-18 57 views
2

我試圖顯示一個表,該表具有JSF 2.1.7和Primefaces 3.3.1的垂直和水平標題。如何在p:datatable中顯示垂直和水平標題?

這基本上是我想要做什麼:

<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訪問的資源包。我怎樣才能定義每行顯示哪些值?

有人能指點我正確的方向嗎?謝謝。

回答

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> 

,但我不知道是否有可能加入「頭」的行

請。

如果你需要來自每行資源包的不同文本,我會在Java代碼中加載文本a nd將它們添加到數據表中顯示的對象。簡單地創建一個新的類,擴展/分配到/代理你想要顯示的原始類,並添加一個屬性headerLabel(來自資源包的值)。那麼你可以這樣做:

<p:dataTable var="person" value="#{bean.personsWithLabels}"> 
    <p:column> 
    <h:outputText value="#{person.headerLabel}"/> 
    </p:column> 
    ... 
</p:dataTable>