2012-10-30 8 views
13

मैं जेएसएफ प्राइमफेस 3.1 के साथ काफी नया हूं। मैं एक "जटिल" तालिका बनाने की कोशिश करता हूं और मुझे डेटाटेबल (मुझे सॉर्टिंग घटक की आवश्यकता है) का उपयोग करके एक अच्छा समाधान नहीं मिल रहा है।प्राइमफेस डेटा पंक्तियों के साथ पोर्टेबल

मैं का उपयोग कर ऐसे ही एक बुनियादी POJO, निम्न HTML प्रतिनिधित्व करने के लिए एक मेज बराबर का निर्माण करना चाहते हैं:

String field1 
String field2 
List<String> fields3 // 3 items 
String field4 

<table border="1"> 
<tr> 
    <td rowspan="3">col1</td> 
    <td rowspan="3">col2</td> 
    <td>col3.1</td> 
    <td rowspan="3">col4</td> 
</tr> 
<tr> 
    <td>col3.2</td> 
</tr> 
<tr> 
    <td>col3.3</td> 
</tr>  
</table> 

मैं शायद बहुत कम जानकारी देते हैं, इसलिए यदि आप इसकी आवश्यकता है, कृपया मुझे बताओ :) मुझे उम्मीद है कि मेरा प्रश्न स्पष्ट है।

आप

+0

क्या पंक्ति वास्तव में आवश्यक है? क्या आप सिर्फ नेस्टेड टेबल/सूची में 'फ़ील्ड 3' प्रस्तुत नहीं कर सकते? – BalusC

+0

हां, यह एक नेस्टेड टेबल/सूची हो सकती है। मैंने सबटेबल की कोशिश की, लेकिन मैं इसे सेल में उपयोग नहीं कर सकता: –

+0

बस 'फ़ील्ड 3' संपत्ति पर '' का उपयोग करें। – BalusC

उत्तर

0

एक रॉक-ठोस और कस्टम ग्रिड के लिए सभी लचीला समाधान < ग उपयोग करने के लिए है: foreach> एक साथ Primefaces साथ < p: panelGrid>:

<html ... xmlns:c="http://java.sun.com/jsp/jstl/core" 
      xmlns:p="http://primefaces.org/ui"> 
    <p:panelGrid> 
     <p:row> 
      <p:column styleClass="ui-state-default" colspan="2"><!-- header --> 
       <h:outputText value="Some Header"/> 
      </p:column> 
      ... 
     </p:row> 
     <p:row><!-- other header row --> 
      ... 
     </p:row> 
     <c:forEach items="#{list}" var="element"> 
      <p:row> 
       <p:column styleClass="ui-state-default" rowspan="#{list.sublist.someSizeExpression}"><!-- left rowspan --> 
        <h:outputText value="#{element.name}"/> 
       </p:column> 
       <c:forEach items="#{element.sublist}" var="subelement"> 
        <p:column> 
         <h:selectBooleanCheckbox/> 
        </p:column> 
       </c:forEach> 
      </p:row> 
     </c:forEach> 
    </p:panelGrid> 
</html> 

यह अच्छा, कमांड बटन लग रहा है और AJAX में काम करता है दोनों सिर और कोशिकाएं।

+0

अच्छा लगता है :) धन्यवाद –

1

के बाद आपने अपने टैग में primefaces उल्लेख धन्यवाद। primefaces (या richfaces) केवल शीर्ष लेख और पाद के लिए रोस्पेन प्रदान करता है: मैं तुम्हें p:panelGrid

<p:panelGrid> 

    <p:row> 
     <p:column rowspan="3"/> 
     <p:column rowspan="3"/> 
     <p:column rowspan="1"/> 
     <p:column rowspan="3"/> 
    </p:row> 

    <p:row> 
     <p:column/> 
    </p:row> 

    <p:row> 
     <p:column/> 
    </p:row> 

</p:panelGrid> 
+1

हां, लेकिन मुझे कुछ कॉलम सॉर्ट करने की आवश्यकता है, इसलिए डेटाटेबल एक अच्छा विकल्प लगता है। –

1

मैं एक ही समस्या थी उपयोग करने के लिए सलाह देते हैं।

तब मैं icefaces ace:datatable घटक का उपयोग करने की कोशिश की और यह colum (रों) आप "rowspanable" होना चाहता हूँ में केवल एक ही विशेषता जोड़कर चलाएँ: ace:column: groupBy="#{bean.field}"

आप सामान्य रूप से पंक्तियों की एक सूची देते हैं और यह घटक जेनरेट की गई HTML तालिका में स्वचालित रूप से सभी पंक्तियों को उत्पन्न करता है (मुझे लगता है कि समान मूल्यों के neigbourhood autodetecting द्वारा)।

यह प्राइमफ़ेस घटकों के साथ पूरी तरह से चलता है: इस पल में मेरे पास बर्फबारी डेटाटेबल्स में प्राइमफेसेस आउटपुट लेबल है, यह बर्फबारी डेटाटेबल एक प्राइमफेस पैनल के अंदर है।

+2

मैंने अंत में अपनी खुद की तालिका लागू की: –

+0

@ जीन-फ्रैंकोइसहौज़ार्ड मेरे जैसे उन लोगों के लिए जो इस कार्यशीलता के लिए हैं, क्या आप अपना समाधान एक सहायक के रूप में पोस्ट कर सकते हैं? – Stephan

+0

रिचफेस रोशन का समर्थन करता है! हम इसे subtables के साथ कुछ स्थानों में उपयोग करते हैं। बस सुनिश्चित करें कि आप rendered = "# {rowKey eq 0}" rowspan = "# {bean.listSize}" का उपयोग करें। आप भी उदाहरण दे सकते हैं 10 और 6 के पंक्तियों के साथ दूसरा स्तंभ और दूसरा स्तंभ (केवल और उदाहरण) के साथ पहला स्तंभ। आपके प्रस्तुत किए जाने के लिए आपको दूसरे कॉलम के लिए एक और इंडेक्स की आवश्यकता होगी। – Ben

0

मैं रिचफेस डेटाटेबल पर एक नज़र डालेगा। मैंने जटिल लेआउट के लिए प्राइमफेस टेबल की तुलना में अधिक लचीला पाया।

आप

<rich:collapsibleSubTable 
    value="#{bean.getData()}" 
    var="line" 
    id="subTable" 
    rowKeyVar="rowKey" 
    width="100%"> 
<rich:column width="40" rendered="#{rowKey eq 0}" rowspan="#{line.firstColRowSpan}"> 
    #{line.country} 
    </rich:column> 
    <rich:column rendered="#{line.index eq 0}" rowspan="#{line.secondColRowSpan}"> 
     #{line.state} 
    </rich:column> 
    <rich:column> 
    #{line.city} 
    </rich:column> 
</rich:subtable> 

उपयोग करती हैं इसलिए अपनी लाइन डेटा इस तरह दिखता है, तो कर सकते हैं:

US CA San Francisco 0 (index) 6 (firstColRowSpan) 3 (secondColRowSpan) 
US CA LA 1 6 3 
US CA Jose 2 6 3 
US TX Huston 0 6 2 
US TX Dallas 1 6 2 
US AZ Phoenix 0 6 1 
UK Surrey Guildford 0 1 1 

तालिका

US CA  San Francisco 
      LA 
      Jose 
    TX  Huston 
      Dallas 
    AZ  Phoenix 
UK Surrey Guildford 

प्रदर्शित होगा यह महत्वपूर्ण है आप बटन है, तो यह है कि/लिंक इत्यादि उन पंक्तियों में से एक में जो आप एक rendered = "# {rowKey eq 0}" जोड़ते हैं!

संबंधित मुद्दे