2009-04-15 19 views
9

मैं जानना चाहता हूं कि क्या एएच में एकाधिक पाद लेख पंक्तियों का कोई तरीका है: डेटाटेबल (या टी: डेटाटेबल) मैं ऐसा कुछ करना चाहता हूं (जो संकलित नहीं करता)जेएसएफ डेटा में एकाधिक पाद लेख पंक्ति

<h:dataTable ... var="row"> 
    <h:column> 
    <f:facet name="header"> 
    Header 
    </f:facet> 
    <h:outputText value="#{row.value}"/> 
    <f:facet name="footer"> 
    FirstFooter 
    </f:facet> 
    <f:facet name="footer"> 
    Second Footer in a new tr 
    </f:facet> 
    </h:column> 
</h:dataTable> 
की तरह इस

<table border=1 style="border:1px solid"> 
<thead><tr><th>Header</th></tr></thead> 
<tbody><tr><td>Data Value 1</td></tr> 
<tr><td>Data Value 2</td></tr> 
<tr><td>Data Value ...</td></tr> 
<tr><td>Data Value n</td></tr> 
</tbody> 
<tfoot> 
<tr><td>FirstFooter</td></tr> 
<tr><td>Second Footer in a new tr</td></tr> 
</tfoot> 
</table> 

कोई भी विचार किया जा रहा है परिणाम somthing के साथ

यह कैसे सबसे अच्छा पूरा करने के लिए? धन्यवाद।

संपादित करें: यह बहुत अच्छा होगा अगर मैं एक कस्टम नियंत्रण/कस्टम रेंडरर का उपयोग कर

उत्तर

5

समाधान मैं का उपयोग कर समाप्त हो गया टी के साथ जुड़े एक कस्टम रेंडरर था: datatable (datatable को कुल्हाडी विस्तार)

public class HtmlMultiHeadTableRenderer extends HtmlTableRenderer 

मैं केवल जिसमें से एक विधि

protected void renderFacet(FacesContext facesContext, 
    ResponseWriter writer, UIComponent component, boolean header) 

ओवरराइड करने के लिए किया था मैंने नाम शीर्षलेख, हेडर 2, हेडर 3 के साथ पहलुओं की तलाश की ... हेडरएन (जैसे ही कोई गायब हो रहा है) और फूटर के साथ ही।यह, मेरी तरह

<h:dataTable ... var="row"> 
    <h:column> 
    <f:facet name="header"> 
    Header 
    </f:facet> 
    <f:facet name="header2"> 
    A second Tr with th's 
    </f:facet> 
    <h:outputText value="#{row.value}"/> 
    <f:facet name="footer"> 
    FirstFooter 
    </f:facet> 
    <f:facet name="footer2"> 
    Second Footer in a new tr 
    </f:facet> 
    </h:column> 
</h:dataTable> 

इस कोड और दस्तावेज़ में (समूह के आधार पर colspans की इजाजत दी जैसे कुछ अन्य एक्सटेंशन के साथ) ले लिया एक दिन के बारे में कोड करूँ अनुमति दी गई है

+0

डेविड आप इस http://stackoverflow.com/questions/12104906/should-i-use-datatable-or-panelgrid-jsf/12105069#comment16179940_12105069 के लिए मेरी सहायता कर सकते हैं – khan

1

(पहलुओं नाम अद्वितीय होना चाहिए (वे एक facet map में जमा हो जाती)।)

दो तरीके करने के लिए से बचने के सकता है इस वसंत को दिमाग में:

  1. बस पाद लेख में panelGrid डालें और अपनी इच्छित दिखने के लिए स्टाइल शीट का उपयोग करें।
  2. custom componentrenders जो मार्कअप आप चाहते हैं उसे बनाएं।
+0

मैं एक कस्टम घटक का उपयोग करने से बचने की उम्मीद कर रहा था क्योंकि डेटाटेबल मुझे जो चाहिए उसे बहुत करीब आता है। मैं पहले से ही आगे बढ़ गया हूं और सीएसएस का उपयोग शैली के समान कुछ करने के लिए कर रहा हूं लेकिन यह बहुत हैकी है। मैं उम्मीद कर रहा था कि कोई मुझे कुछ खोने के बारे में बता सकता है। अरे। –

3

मैकडॉवेल ने कहा, पैनलग्रिड जो कुछ भी आप कस्टम नियंत्रण के बिना पूछ रहे हैं, वह तब तक करेगा जब तक कि मुझे कुछ याद न हो।

<f:facet name="footer"> 
    <h:panelGrid columns="1"> 
     <h:outputText value="FirstFooter" /> 
     <h:outputText value="Second Footer in a new tr" /> 
    </h:panelGrid> 
</f:facet> 

इस रूप में

<tfoot> 
    <tr> 
     <td colspan="3"> 
      <table> 
       <tbody> 
        <tr> 
         <td>FirstFooter</td> 
        </tr> 
        <tr> 
         <td>Second Footer in a new tr</td> 
        </tr> 
       </tbody> 
      </table> 
     </td> 
    </tr> 
</tfoot> 

साथ ही आप panelGrid में outputText के अलावा अन्य टैग का उपयोग कर सकते हैं जो कुछ भी प्रभाव आप के लिए (बस सुनिश्चित करें कि आप उन्हें एक panelGroup में लपेट कर देख रहे हैं पाने के लिए इस प्रकार है renders या कुछ समान)। कौन है आप के बाद क्या कर रहे हैं लेकिन दुर्भाग्य से पुस्तकालय आप इंगित किया है का उपयोग नहीं कर

<f:facet name="footer"> 
    <rich:column> 
     <h:outputText value="First Footer"/> 
    </rich:column> 
    <rich:column breakBefore="true"> 
     <h:outputText value="Second Footer"/> 
    </rich:column> 
</f:facet> 

:

+0

उत्तर के लिए धन्यवाद मैं पाद लेख को मुख्य शरीर के समान तालिका का उपयोग करने के लिए चाहता हूं। मैं वर्तमान में ऐसा करने के लिए एक कस्टम रेंडरर पर काम कर रहा हूं। एक बार पूरा होने के बाद मैं विवरण पोस्ट करूंगा। –

1

Richfaces स्तंभ breakBefore विशेषता है कि आप इस तरह कुछ करने के लिए अनुमति होगी है।

यदि आप फेसलेट का उपयोग कर रहे हैं तो आप हमेशा ui के साथ एक नियमित तालिका बना सकते हैं: दोहराएं।

+0

उत्तर के लिए धन्यवाद, दुर्भाग्यवश हम उस पुस्तकालय का उपयोग नहीं कर रहे हैं। –

0

मैं एक कस्टम रेंडरर का उपयोग नहीं कर सकता है इसलिए मैं यह JSF अंदर सादे HTML के साथ किया था:

 <t:dataTable value="#{...}" var="..."> 

      <f:facet name="header"> 
       <h:outputText escape="false" value="&lt;/th&gt;&lt;/tr&gt;"/> 
       <tr> 
        <th rowspan="2" class="tableHeaderLightGrey"> 
         Zeit 
        </th> 

        <th colspan="#{filterController.trafficClass.size()}" class="tableHeaderLightGrey"> 
         Verbrauch 
        </th> 
        <th colspan="#{filterController.trafficClass.size()}" class="tableHeaderLightGrey"> 
         Bandbreite 
        </th> 
        <th colspan="#{filterController.trafficClass.size()}" class="tableHeaderLightGrey"> 
         Auslastung 
        </th> 

        <th rowspan="2" class="tableHeaderLightGrey"> 
         Gesamtauslastung 
        </th> 
       </tr> 
       <tr> 
        <c:forEach items="#{filterController.trafficClass}" var="trafficClass"> 
         <th class="tableHeaderLightGrey"> 
          #{trafficClass.name} 
         </th> 
        </c:forEach> 

        <c:forEach items="#{filterController.trafficClass}" var="trafficClass"> 
         <th class="tableHeaderLightGrey"> 
          #{trafficClass.name} 
         </th> 
        </c:forEach> 

        <c:forEach items="#{filterController.trafficClass}" var="trafficClass"> 
         <th class="tableHeaderLightGrey"> 
          #{trafficClass.name} 
         </th> 
        </c:forEach> 
       </tr> 
       <h:outputText escape="false" value="&lt;tr&gt;&lt;th&gt;"/> 

      </f:facet> 

      ... columns ... 

     </t:dataTable> 

हैडर पहलू एक <tr><th> जो मैं सही outpuut पाठ के साथ दूर clode और अंत में फिर से खोलने के मान्य एचटीएमएल पाने के लिए खुलता है। आपको अपने कस्टम हेडर के पहले और बाद में एक खाली <tr><th></th></tr> मिलेगा, लेकिन यह मेरे मामले में स्वीकार्य था।

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