2013-03-07 15 views
5

मैं वास्तव में एक कस्टम समग्र तालिका घटक बनाने की कोशिश कर रहा हूं क्योंकि एच: डेटाटेबल या पी: डेटाटेबल मेरी आवश्यकताओं के अनुरूप नहीं है। फिर भी इसका उपयोग एक प्राइमफेस की तरह किया जाएगा। मुझे JSF composite component childrens और Expose items of a list while iterating within composite component मैंने फिनिश लाइन देखी, लेकिन अब मैं अटक गया।insertChildren का उपयोग करके और बाल विशेषताओं को प्राप्त करना

मेरे एक्सएचटीएमएल:

<h:body> 
    <sm:datatable mode="columntoggle" id="mytable" value="#{managerBean.objects}" var="object"> 
     <sm:column header="KeyHeader" property="key"> 
      <h:outputText value="#{object.key}"/>  
     </sm:column> 
     <sm:column header="ValueHeader" property="value"> 
      <h:outputText value="#{object.value}"/>  
     </sm:column> 
    </sm:datatable> 
</h:body> 

और यह datatable समग्र है:

<cc:interface> 
    <cc:attribute name="id" /> 
    <cc:attribute name="mode" /> 
    <cc:attribute name="var" /> 
    <cc:attribute name="value" type="java.util.List"/> 
</cc:interface> 

<cc:implementation> 
    <table data-role="table" data-mode="#{cc.attrs.mode}" id="my-table"> 
     <thead> 
      <tr> 
       <ui:repeat value="#{component.getCompositeComponentParent(component).children}" var="child"> 
        <th> 
         <h:outputText value="#{child.attrs.header}"/> 
        </th> 
       </ui:repeat> 
      </tr> 
     </thead> 
     <tbody> 
      <ui:repeat value="#{cc.attrs.value}" var="object"> 
       <tr> 
        <c:forEach items="#{cc.children}" var="child" varStatus="loop"> 
         <cc:insertChildren/> 
        </c:forEach> 
       </tr> 
      </ui:repeat> 
     </tbody> 
    </table> 
</cc:implementation> 

और वह स्तंभ समग्र

<cc:interface> 
    <cc:attribute name="header" /> 
    <cc:attribute name="property" /> 
    <cc:facet name="content"/> 
</cc:interface> 

<cc:implementation> 
    <td><cc:insertChildren/></td> 
</cc:implementation> 
है

thead काम करता है स्वसंपूर्ण

tbody स्टैंडअलोन

काम करता है की तरह ऊपर मैं केवल tbody मिल उन्हें एक साथ लाना। थैड हमेशा खाली रहता है कोई सुझाव? अग्रिम में आपकी मदद के लिए धन्यवाद!

+0

'

उत्तर

1

#{cc.children} जो करने के लिए #{component.getCompositeComponentParent(component).children} दोनों काम करना चाहिए लेकिन किसी कारण से कुछ संस्करणों में काम करने के लिए असफल बराबर है, मुझे लगता है JSF के इस हिस्से में अभी भी थोड़ा त्रुटिपूर्ण है।

,

In JSF2, how to know if composite component has children?

+1

मैंने अभी कोशिश की लेकिन वास्तव में काम नहीं करता है। केवल बच्चा ही कार्यान्वयन है। इसलिए _ # {child} _ के लिए आउटपुट _ <टेबल डेटा-रोल = "टेबल" डेटा-मोड = "# {cc.attrs.mode}" id = "my-table">

\t [email protected] \t \t [email protected] \t
_ – CrisbyJ

1

मैं एक ही मुद्दा रहा था आप

#{cc.getFacets().get('javax.faces.component.COMPOSITE_FACET_NAME').children} 

कृपया के साथ-साथ इस सूत्र का उल्लेख करने की कोशिश की है। मेरा कामकाज के बजाय renderFacet का उपयोग करना था।

डाले गए तत्वों पर पुन: प्रयास करने के लिए मैंने उपयोग किया है: #{cc.facets.yourFacetName.children} और तत्वों को स्वयं सम्मिलित करने के लिए मैंने उपयोग किया है: <composite:renderFacet name="yourFacetName"/>

1

मुझे और पर <composite:insertChildren /> का उपयोग करके एक ही घटक में असंभव होने के लिए उपयोग किया गया है। कम से कम Mojarra 2.2.6 कार्यान्वयन में।

मध्यवर्ती पहलू दृष्टिकोण मेरे लिए भी काम नहीं करता था।

  1. बच्चे घटक (टैब) को बनाए रखने के रूप में है
  2. से समग्र सभी कोड को दूर: माता-पिता के कार्यान्वयन (टैब समूह) घटक
  3. में encodeAll() लागू

    आखिरकार, मेरी समाधान के लिए गया था पैरेंट घटक

यह प्रश्न एक वर्ष से अधिक पुराना है। अगर दृष्टि में एक आसान समाधान है तो कृपया साझा करें।

4

यह एक बग नहीं है, यह वास्तव में mojarra में डिज़ाइन किए गए काम करता है। सीसी का उपयोग करना: insertChildren बच्चों को सीसी के मूल टैग में ले जाता है: insertChildren टैग। यह समस्या किसी अन्य समस्या के बराबर है और इसका एक ही समाधान है। मेरा जवाब this question पर देखें।

मूल रूप से, आप <cc:insertChildren> के आस-पास <ui:fragment> डालते हैं, तो FacesComponent बीन में किसी संपत्ति के लिए उस खंड को बांधें।

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

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