2011-06-09 17 views
5

मैं अपने जेएसएफ आवेदन में जेएसटीएल टैग का उपयोग कर रहा हूं। कुछ कार्यों के साथ, मुझे घटक पेड़ को पुनर्निर्मित करने की आवश्यकता होती है जैसे कि यह प्रारंभिक निर्माण था। मेरे वर्तमान लक्षण घटक संघों, डुप्लिकेट आईडी, और बालों के घटकों के साथ अन्य मुद्दों के लिए गलत वस्तु हैं। यह एक सी का उपयोग कर रहा है: foreach (दोहराना टैग का उपयोग नहीं कर सकता, उदाहरण लिंक देखें) टैग जो निर्माण चरण में उपयोग किया जाता है।जेएसटीएल का उपयोग कर जेएसएफ 1.2 पेज में बिल्ड चरण को कैसे बल दें?

मेरी समझ यह है कि पुनर्निर्माण को मजबूर करना संभव है, लेकिन मैं यह नहीं ढूंढ पाया कि यह कहां या कैसे होता है। मैं उन समाधानों के लिए खुला हूं जो क्लाइंट या सर्वर पर शुरू होते हैं।

कोड के उदाहरण के लिए मैं Richfaces में गतिशील टैब पर इस पृष्ठ का उपयोग कर रहा हूं। http://in.relation.to/Bloggers/UsingDynamicallyCreatedRichFacesTabPanelForSearchResults

नोट: यूई का उपयोग करना: दोहराना या a4j: दोहराना संभव नहीं है। विवरण के लिए उदाहरण पृष्ठ देखें।

अन्य नोट: ऐप सेम सत्र स्कोप्ड हैं और उनमें डेटा डेटा घटक पेड़ राज्य नहीं होना चाहिए।

अद्यतन यह सवाल मुद्दा this article में उठाया और पहली टिप्पणी करने के लिए सीधे है। मुझे नहीं पता था कि वास्तव में पहली टिप्पणी में कामकाज कैसे किया जाए और स्वीकृत उत्तर ने मुझे इसका नेतृत्व किया।

उत्तर

4

मुझे नहीं लगता कि पुराने घटक समस्या हैं। डुप्लिकेट आईडी विशेष रूप से <c:forEach> टैग का उपयोग करने का दुष्प्रभाव हैं। ऐसा इसलिए है क्योंकि <c:forEach> किसी भी बच्चे के componenets को घटक पेड़ में कई बार जोड़ देगा और प्रत्येक बार यह उसी आईडी का उपयोग करने का प्रयास करेगा (<ui:repeat> के विपरीत)। यह स्पष्ट रूप से डुप्लिकेट आईडी में परिणाम देता है (आप उस उदाहरण में नोटिस करेंगे जो आपने लिंक किया है, उन्होंने <c:forEach> टैग के भीतर कोई आईडी निर्दिष्ट नहीं की है)।

मुझे यकीन नहीं है कि 'व्यू बिल्ड चरण' से उनका क्या मतलब है। यदि आप JSF documentation देखते हैं, तो आप देखेंगे कि ऐसा कोई चरण नहीं है। किसी भी मामले में, जब आप <ui:repeat> का उपयोग करते हैं, तब तक जब तक आप AJAX कॉल का उपयोग करने के लिए उपयोग करते हैं, तो rich:tabPanel फिर से प्रस्तुत करता है तो इसे काम करना चाहिए।

कारण वे <ui:repeat> के लिए उद्धृत काम नहीं कर रहा था:

आप दोहराने घटकों का उपयोग नहीं कर सकता है (न ui: दोहराने: दोहराने और न ही a4j) कि के लिए है क्योंकि वे पेज के दौरान काम समय प्रस्तुत करना और नहीं है जेएसएफ पेड़ में घटक बनाएं लेकिन एक ही उदाहरण को फिर से करें।

और उनके उदाहरण में वे प्रयोग किया है:

... 
<a4j:commandButton action="#{capitalsBean.search}" value="Search" reRender="output" id="search"/> 
... 
<a4j:outputPanel id="output"> 
    <rich:tabPanel id="tapPanel" width="700" rendered="#{not empty capitalsBean.foundCapitals}"> 
     <c:forEach items="#{capitalsBean.foundCapitals}" var="cap"> 
     ... 

आप खोज के a4j:commandButton कैसे करता है 'पृष्ठ प्रस्तुत करना समय' tapPanel के लिए नहीं होती पर reRender="output" को निर्दिष्ट कर रहे हैं ??

संक्षेप में, <ui:repeat>, जेएसटीएल और जेएसएफ का उपयोग आमतौर पर बहुत अच्छे बेडफेलो नहीं होते हैं।

संपादित करें: मैं इस पहले किया जाना चाहिए के बाद से मैं rich:tabPanel लेकिन <ui:repeat> के साथ अनुभव नहीं है, ऐसा लगता है, के साथ नहीं किया जा सकता rich:tabPanel (लेकिन उदाहरण में कहा गया है कारणों आप लिंक है, इसलिए के लिए नहीं मेरी उलझन)। <c:forEach> का उपयोग न करें, rich:tabPanel पर बाध्यकारी घटक का उपयोग करें।

+0

मेरा मुद्दा c के कारण डुप्लिकेट आईडी नहीं है: प्रत्येक टैग के लिए हार्ड कोड कोड को दोहराए जाने के लिए टैग: foreach मैं f: subview का उपयोग करता हूं। मुद्दा यह है कि पृष्ठ कभी-कभी बदलता है जब घटक पेड़ पुराना होता है। मैं यह देखने के लिए बाध्यकारी घटक देखता हूं कि यह एक समाधान है या नहीं। मैं "दृश्य निर्माण वाक्यांश" के लिए सही वाक्यांश खोजने का प्रयास करूंगा। – Adam

+0

मेरा मानना ​​है कि "व्यू बिल्ड फेज" द्वारा मेरा क्या मतलब है, पुनर्स्थापना दृश्य चरण का "नया दृश्य" या "प्रारंभिक दृश्य" पथ था जो फिर प्रतिक्रिया चरण प्रस्तुत करने के लिए बाईपास करता था? – Adam

+0

ईमानदार होने के लिए मुझे उस डिग्री के लिए जेएसएफ जीवन चक्र की आंतरिक कार्यप्रणाली नहीं पता है। हालांकि आपको इसकी आवश्यकता नहीं है। एक एजेक्स कॉल जेएसएफ लाइफसाइकिल को उसी तरह से आमंत्रित करता है जिस तरह से कोई भी नियमित जेएसएफ पोस्टबैक होगा। केवल अंतर यह है कि आप चुन सकते हैं और चुन सकते हैं कि 'प्रक्रिया' और 'पुनर्विक्रेता' विशेषताओं का उपयोग करके विभिन्न चरणों द्वारा कौन से घटक संसाधित किए जाते हैं। मैं नहीं देख सकता कि आपको एक 'पुराना' घटक पेड़ क्यों मिलेगा। क्लाइंट पक्ष पर 'स्टेल' हो सकती है, केवल वे चीजें हैं जो 'पुनर्विक्रेता' विशेषता में शामिल नहीं हैं। –