2012-11-30 20 views
6

यहाँ मेरी मॉडल है:प्राइमफेस में नेस्टेड डेटा का आंकलन कैसे करें?

User.java

public class User { 
    //... 

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

मैं इस तरह उपयोगकर्ता मित्रों के एक तालिका का निर्माण करना चाहते हैं:

users.jsf

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

चूंकि बहुत से उपयोगकर्ता हैं, तो टी को डंप करना संभव नहीं है वह एक ही समय में उपयोगकर्ता टेबल।

इस मामले में डेटाटेबल घटक आदर्श है क्योंकि इसमें अंतर्निहित अंकन समर्थन है। यह आदर्श भी है क्योंकि कॉलम को सॉर्ट करना संभव है ...

दुर्भाग्यवश, मैं प्राइमफ़ेस उदाहरणों को उपयोगकर्ता कॉलम में पंक्ति बदलने के लिए एक तरीका नहीं ढूंढ पाया।

मैं इस डेटाटेबल को कैसे बना सकता हूं?

कुछ अन्य ओपी इस समान समस्या हो रही:

संपादित
यहाँ the final solution I came up है।

उत्तर

0

@ Kerem के जवाब के आधार पर, यहाँ समाधान मैं के साथ आया है:

आदेश मुख्य datatable की खुद की पंक्तियों की तरह नेस्टेड datable बनाने के लिए, मैं ओवरराइड है सीएसएस वर्ग .ui-dt-c। विवरण के लिए h:headstyle टैग में चेक करें।

1- यदि मैं इस मामले में उपयोगकर्ता द्वारा उपयोगकर्ता ब्राउज़ करें और मित्रों की सूची प्राप्त करने, चाहते हैं मैं DataList पसंद करते हैं:

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

प्राइमफ़ेस 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

मेरे लिए वहाँ दो समाधान है।

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

:

<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- एक मामले में जहां मैं सीधे मित्र (listFreinds [उपयोगकर्ता नाम, दोस्त]) या जब की सूची संभाल कर सकते हैं में मैं JPQL क्वेरी उपयोग कर रहा हूँ दूसरे मामले, v6.0.11 के बाद से Primefaces पंक्ति समूहन के साथ एक नया देशी हल है

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

+1

क्या आप कृपया अपने उत्तर को नमूना कोड के साथ चित्रित कर सकते हैं? – Stephan