2010-07-29 6 views
6

मैं अपनी डेटा सूची में कुछ आइटम प्रस्तुत करने के लिए गतिशील रूप से एक फेसलेट चुनना चाहता हूं। पहली कोशिश होगी:गतिशील यूई: अंदर ui: दोहराना शामिल करें। क्या कोई आसान समाधान है?

 
<ui:repeat value="#{panels}" var="panel"> 
    <ui:include src="#{panel.facelet}"> 
</ui:repeat> 

लेकिन यह ui के स्रोत के बाद से काम नहीं करेगा: शामिल बहुत जल्दी मूल्यांकन किया जाता है। चेहरे की जानकारी वास्तव में गतिशील है, इसलिए मैं सी का उपयोग नहीं कर सकता: प्रत्येक के लिए (वास्तव में चेहरे के साथ मिश्रण करने की सिफारिश नहीं की जाती है)। मुझे लगता है कि यह एक घटक आधारित ui खोजने के लिए नीचे उबलता है: वैकल्पिक शामिल करें।

क्या ऐसी कोई चीज़ है या मुझे अपना खुद लिखना है?

+0

हम साल के लिए यह एक ही मुद्दे के साथ संघर्ष जारी है। मुझे आश्चर्य है कि क्या आपको कभी भी जेएसएफ 2 के साथ बेहतर समाधान मिला है?यदि आप कस्टम समाधान साझा नहीं कर सकते हैं? – cyberoblivion

+0

@cyberoblivion हमने अपने स्वयं के घटक को लागू किया है और इसके साथ काम करने के लिए यूरीपीट अनुकूलित किया है - मुख्य रूप से एकाधिक घोंसले के स्तर की अनुमति देने के लिए। यह अभी भी हमारे उत्पादन प्रणालियों में काम करता है। लेकिन हम जेएसएफ से दूर चले गए। – mrembisz

+0

तो समाधान ऐसा कुछ नहीं है जो किसी और के लिए उपयोगी होगा या आपको कोड साझा करने से मना कर दिया गया है? मुझे कोड में बहुत दिलचस्पी है। – cyberoblivion

उत्तर

2

सी: क्योंकि प्रत्येक इसे हल करेगा, आप इसका उपयोग क्यों नहीं कर सकते?

दिलचस्प है कि इस मुद्दे के बारे में लेख: http://www.ilikespam.com/blog/c:foreach-vs-ui:repeat-in-facelets

+0

धन्यवाद लेकिन सी: के लिए एक बार मूल्यांकन किया जाता है, जब दृश्य बनाया जाता है। मेरे मामले में # {पैनल} के अंतर्गत क्या होता है जब उपयोगकर्ता पृष्ठ के साथ इंटरैक्ट करता है। – mrembisz

+0

इसे उत्तर के रूप में चिह्नित करना: यह प्रदर्शन प्रभाव के कारण ज्यादातर मेरे लिए काम नहीं करेगा लेकिन अधिकांश के लिए ठीक होगा। कस्टम गतिशील का उपयोग अब के लिए शामिल हैं। – mrembisz

0

मैं कुछ इसी तरह कस्टम टैग और FaceletHandler आदि का उपयोग कर अंत में करने का प्रयास कर याद सभी छोटी प्रतिपादन समय मुद्दों यह प्रयास के लायक नहीं बनाया है। मुझे लगता है कि मैं था (और अभी भी हूं: - (...) जेएसएफ 1.1 के लिए फेसलेट का उपयोग करके, यह सुनिश्चित नहीं है कि यह बाद के संस्करणों में बेहतर है।

आपके पास कितने गतिशील/कितने अलग चेहरे हैं साथ सौदा? कारण मैं पूछता हूँ कि आप (संकलक जादूगरों से एक शब्द उधार लेने के लिए) हो सकता है अपने पाश उतारना है। इसके बजाय

<ui:repeat value="#{panels}" var="panel"> 
    <ui:include src="#{panel.facelet}"> 
</ui:repeat> 

आप

<custom:panelOneFacelet rendered="#{hasPanel1}" /> 
<custom:panelTwoFacelet rendered="#{hasPanel2}" /> 
<!-- etc... --> 

और अपने facelet में कर सकता है, तो आप कुछ ऐसा होगा:

<c:if test="#rendered" > 
    <!-- EVERYTHING IN THE FACELET HERE!!!--> 
</c:if> 

कम तकनीकी दृष्टिकोण इस तरह की एक छोटी सी नियंत्रित सेट के लिए ठीक है, लेकिन यह काम नहीं कर सकता आप facelets की एक बहुत बड़ी और अलग सेट है।

मैं पूछ सकता है क्यों, बी/सी उच्च स्तरीय की समझ के साथ कभी कभी, अतः गुरु बहुत सरल विचारों एक ही लक्ष्य

+0

असल में हम एक व्यापारिक रूप प्रस्तुत करते हैं जो हमें डेटा फ़ील्ड के पेड़ के रूप में प्रदान किया जाता है। आप यहां जो वर्णन करते हैं वह हमारी पहली कोशिश थी, लेकिन यह प्रत्येक संसाधन में उपभोग करने के लिए बहुत संसाधन था क्योंकि हमारे पास संभावित प्रतिपादन विकल्पों का एक पूरा सेट था। हमने अपना खुद का टैग + घटक शामिल करने को समाप्त किया जो ठीक काम करता है लेकिन जटिलता और जेएसएफ आंतरिक के कारण बनाए रखने के लिए एक वास्तविक दर्द है। हमने लगभग 3 साल पहले ऐसा किया था और अब जेएसएफ 2 पर जाने की योजना है। मैं उम्मीद कर रहा था कि इस समय के कुछ ऑफ-द-बॉक्स विकल्प दिखाई दिए। – mrembisz

+0

हमम .. यकीन नहीं है कि मैं समझता हूं ... तो आपको लाइब्रेरी {स्थान, नाम, सूची पुस्तकें} पसंद है जहां पुस्तक {name, isbn, लेखक} जहां लेखक {name, age, ..} ऐसा कुछ है? और आप फार्म की खेतों के पेड़ को उत्पन्न करने के लिए उस तरह की संरचना प्राप्त करना चाहते हैं? ... मुझे यह गलत होना चाहिए, आह? .. यह मेरे लिए बहुत जटिल लगता है, मैं इसे अलग-अलग रूपों और सेमों में तोड़ दूंगा आदि ... –

+0

आपको यह सही मिला है, यह वही है जो हमारे पास है और हम रनटाइम तक रिकॉर्ड संरचना को नहीं जानते हैं। जैसा कि मैंने कहा था कि हमारे पास एक कामकाजी लेकिन काफी जटिल समाधान है। मैं अपने कस्टम जेएसएफ को तर्क शामिल करने की संभावना की जांच करना चाहता हूं। – mrembisz

4

मुझे लगता है कि मैंने पाया पूरा करने के लिए सुझाव है कि हो सकता है कि अपेक्षाकृत सरल उपाय आप खोज रहे हैं

मैंने भी एक यूई के साथ शुरुआत की: एक यूई के अंदर शामिल करें: अपनी तरह दोहराएं, लेकिन मैंने स्वीकार किया कि मुझे एसी का उपयोग करना था: प्रत्येक के लिए, और सी: के लिए प्रत्येक ने गतिशील रूप से xhtml/घटकों का एक अलग सेट प्राप्त करने के लिए बहुत अच्छा काम किया जैसा कि मुझे लगता है कि आपके पास दृश्य में उपयोगकर्ता इंटरैक्शन बदलती चीजों के साथ भी शामिल है। हर घटक मैं शामिल एक ही "बात"/वस्तु पारित किया गया था, भले ही हम सफलतापूर्वक अलग अलग चीजें इस्तेमाल किया था/वस्तुओं गतिशील विभिन्न शामिल करने के लिए - परम काम नहीं कर रहा था:

<c:forEach var="thing" items="#{view.things}"> 
     <ui:include src="#{thing.renderComponent}"> 
      <ui:param name="thing" value="#{thing}"/> 
     </ui:include> 
</c:forEach> 

लेकिन, मेरा ui: यह इस तरह से देखा अवयव।

वह तब हुआ जब मुझे this पोस्ट मिला जिसने मुझे अपना यूई लपेटने के लिए प्रेरित किया: एक एफ: सबव्यू में शामिल करें। और अब सब कुछ निम्न कोड के साथ महान काम कर रहा है:

<c:forEach var="thing" items="#{view.things}" varStatus="loop"> 
    <f:subview id="thing_#{loop.index}"> 
     <ui:include src="#{thing.renderComponent}"> 
      <ui:param name="thing" value="#{thing}"/> 
     </ui:include> 
    </f:subview> 
</c:forEach> 
+1

धन्यवाद, आदमी! एफ: सबव्यू मेरे लिए जवाब था! – hbobenicio

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