2012-11-30 53 views
6

這裏是我的模型:如何在Primefaces數據表中表示嵌套數據?

User.java

public class User { 
    //... 

    public List<User> getFriends() { 
     // ... 
    } 
} 

我想建的用戶朋友們的表是這樣的:

users.jsf

 
+----------+------------+ 
| USER | FRIENDS | 
+----------+------------+ 
|   | ALICE | 
|   +------------+   
| ADAM | BOB  | 
|   +------------+ 
|   | PITT | 
+----------+------------+ 
|   |   | 
.... 

由於有很多用戶,這是不可能的轉儲ŧ他用戶表一氣呵成。

數據表部件是在這種情況下,理想的,因爲它有內置的分頁支持。 它也是理想的,因爲它可以對列進行排序...

不幸的是,我無法通過Primefaces示例找到更改用戶列中rowspan的方法。

我怎樣才能建立這個數據表?

有這種類似的問題,其他一些OP:

編輯
這裏是the final solution I came up

回答

0

基於@凱雷姆的答案,這裏是我想出了一個解決方案:

爲了使嵌套確定年代一樣主數據表中的自己行,我已經重寫了CSS類.ui-dt-c。檢查h:head有關詳細信息,style標籤。

<?xml version="1.0" encoding="UTF-8"?> 
<html 
    xmlns="http://www.w3c.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:fn="http://java.sun.com/jsp/jstl/functions" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
<h:head> 
    <title>USERS and their friends</title> 
    <style> 
     .ui-dt-c { 
      padding: 0px !important; 
     } 
    </style> 
</h:head> 
<h:body> 
<h:form id="form"> 
<p:dataTable 
    value="#{users.list}" 
    var="u"> 

    <p:columnGroup type="header"> 
     <p:row> 
      <p:column headerText="USER" /> 
      <p:column headerText="FRIENDS" /> 
     </p:row> 
    </p:columnGroup> 

    <p:column>#{u.name}</p:column> 
    <p:column> 
     <p:dataTable 
      value="#{u.friends}" 
      var="f"> 
      <p:column>#{f.name}</p:column> 
     </p:dataTable> 
    </p:column> 
</p:dataTable> 
</h:form> 
2

Primefaces expandable rows應該滿足您的需要,只有你需要發揮創意與子行的組成部分。您可以使用主要面data list component作爲子行組件。它會是這個樣子:

<p:row expansion> 
    <p:datalist value ="#{yourTableRowVar.friendslist} Var="friend"> 
    #{friend.firstName} 
    </p:datalist> 
    </p:row expansion> 
12

只需使用你的專欄:)

<h:column> 
    <h:dataTable var="friend" value="#{user.friends}"> 
     <h:column> 
      <h:outputText value="#{friend.name}"/> 
     </h:column> 
    </h:dataTable> 
</h:column> 

這是它的外觀在我的本地內的另一個數據表

enter image description here

3

另一種選擇是使用ui:repeat列內獲取集合的所有值。

例子:

<p:dataTable var="user" value="#{userGroupBacking.users}" id="userTable"> 

    <p:column headerText="User"> 
     <h:outputText value="#{user.name}" /> 
    </p:column> 

    <p:column headerText="Groups"> 
     <ui:repeat var="group" value="#{user.groups}"> 
      <h:outputText value="#{group.name}" /><br /> 
     </ui:repeat> 
... 
1

對我來說有兩個解析:

1 - 如果我想通過用戶瀏覽用戶和檢索的朋友列表,在這種情況下,我更喜歡DataList控件

<p:dataTable value="#{users.list}" var="u"> 

    <p:column headerText="USER">#{u.name}</p:column>  
    <p:column headerText="FRIENDS"> 
     <p:dataList value="#{u.friends}" var="f"> 
      #{f.name} 
     </p:dataTable> 
    </p:column> 

</p:dataTable> 

2-在其中i可直接處理的朋友(listFreinds [用戶名,朋友]),或者當列表中的情況下,我使用JPQL查詢

<p:dataTable value="#{users.listFreinds}" var="u" sortBy="#{u.userName}"> 

    <p:column headerText="USER" groupRow="true">#{u.userName}</p:column>  
    <p:column headerText="FRIENDS">#{u.friend}</p:column> 

</p:dataTable> 

的第二種情況下,與Primefaces行分組因爲v6.0.11一個新的本地溶液

https://www.primefaces.org/showcase/ui/data/datatable/rowGroup.xhtml

+1

你能舉例說明你的答案嗎? – Stephan