2012-11-30 17 views
6

Oto mój model:Jak reprezentować zagnieżdżone dane w datacable Primefaces?

User.java

public class User { 
    //... 

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

Chciałbym zbudować tabelę znajomym użytkownika tak:

users.jsf

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

Ponieważ jest wielu użytkowników, nie można zrzucić t on użytkownika tabeli za jednym razem.

Komponent datowalny jest idealny w tym przypadku, ponieważ ma wbudowaną obsługę stronicowania. Jest to również idealne rozwiązanie, ponieważ można sortować kolumny ...

Niestety, nie udało mi się znaleźć za pomocą przykładów Primefaces sposobu na zmianę zakresu wierszy w kolumnach użytkownika.

Jak mogę zbudować ten datatable?

Niektóre inne OP mając tę ​​podobny problem:

EDIT
Oto the final solution I came up.

Odpowiedz

0

podstawie @ odpowiedź Kerem, oto jest rozwiązaniem wymyśliłem:

Aby zagnieżdżona moŜliwy do oznaczenia datą jak własnych wierszy główny DataTable, mam nadpisane Klasa CSS .ui-dt-c. Sprawdź w h:head znaczniku style, aby uzyskać szczegółowe informacje.

<?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 powinien zaspokoić twoje potrzeby, tylko będziesz musiał wykazać się kreatywnością z komponentem child-child. Można użyć głównych twarzy data list component jako komponentu wiersza potomnego. Będzie to wyglądać mniej więcej tak:

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

Wystarczy użyć innej tabeli danych wewnątrz kolumny :)

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

Jak to wygląda na moim localhost

enter image description here

3

Inną opcją jest użycie ui:repeat wewnątrz kolumny aby uzyskać wszystkie wartości kolekcji.

Przykład:

<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

Dla mnie istnieją dwa rozwiązania:

1- jeśli chcę przeglądać użytkownikowi przez użytkownika i pobrać listę przyjaciół, w tym przypadku wolę 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- W przypadku, gdy mogę poradzić bezpośrednio listę znajomych (listFreinds [nazwa_użytkownika, przyjaciel]) lub gdy używam JPQL zapytanie:

<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> 

The druga sprawa, to nowy rodzimy rozwiązanie z Primefaces Row Grupowanie od v6.0.11

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

+1

Czy możesz zilustrować swoją odpowiedź za pomocą przykładowego kodu? – Stephan

Powiązane problemy