2012-02-05 6 views
5

मैं आह को एक आईडी असाइन करने के लिए कोशिश कर रहा हूँ: एक ui अंदर panelGroup: दोहरानेमैं कैसे निर्धारित कर सकते हैं घंटा की पहचान: ui अंदर panelGroup: दोहराने

कि

<ui:repeat value="#{dashboardPage.dashboardModel.columns}" var="column"> 
    <h:panelGroup layout="block" styleClass="#{column.id} dashboard_column" id="column_#{column.id}"> 

बात यह है कि है की तरह #{column.id} शैली स्टाइल क्लास वैल्यू के अंदर ठीक से रखा जा रहा है लेकिन आईडी विशेषता के अंदर सेट किए गए आईडी एट्रिब्यूट के अंदर सेट नहीं किया जा रहा है जेएसएफ + द्वारा स्वचालित रूप से जेनरेट की गई आईडी स्वचालित रूप से जेनरेट की गई आईडी है। मेरे हार्ड कोडेड मान "कॉलम_"

और यदि मैं हार्ड कोडित "कॉलम_" को हटा देता हूं, मुझे एक एक्सेस मिलता है ption

java.lang.IllegalArgumentException: घटक पहचानकर्ता

किसी भी विचार पर एक शून्य लंबाई स्ट्रिंग नहीं होना चाहिए?

उत्तर

10

<ui:repeat> जैसे रेंडर-टाइम टैग के साथ यह संभव नहीं है। <ui:repeat> हालांकि, पहले से ही पंक्ति सूचकांक के साथ इसे प्रस्तुत करके उत्पन्न क्लाइंट आईडी की विशिष्टता सुनिश्चित करेगा। तो घटक के आईडी विशेषता से केवल ईएल भाग को हटा दें।

एक दृश्य के साथ <c:forEach> (जो मूल रूप से एकाधिक <h:panelGroup> घटकों को उत्पन्न करता है, केवल एक बार जो कई बार प्रस्तुत किया जाता है) के साथ, एक गतिशील आईडी निर्दिष्ट करना संभव है।

<c:forEach items="#{dashboardPage.dashboardModel.columns}" var="column"> 
    <h:panelGroup layout="block" styleClass="#{column.id} dashboard_column" id="column_#{column.id}"> 

एक वैकल्पिक एक JSF <h:panelGroup layout="block"> घटक के बजाय एक स्थिर <div> तत्व का उपयोग करने के लिए है (आप केवल कैसे JSTL Facelets में काम करता है की well aware होना चाहिए)।

<ui:repeat value="#{dashboardPage.dashboardModel.columns}" var="column"> 
    <div class="#{column.id} dashboard_column" id="column_#{column.id}"> 
+0

धन्यवाद, मैंने अंततः इसे div के साथ किया। तो इसका मतलब है कि मैं ui के अंदर जेएसएफ तत्वों को गतिशील आईडी असाइन नहीं कर सकता: खुद से दोहराएं? केवल साधारण HTML तत्वों के लिए – Daniel

+1

यह सही है। रेंडर-टाइम आईडी घटक पेड़ में पंजीकृत नहीं की जा सकती हैं, इसे गतिशील मान के बजाय एक निश्चित मान होना चाहिए। जो भी कार्यात्मक आवश्यकता आप इसे इस तरह से हल करके हल करने के बारे में सोच रहे हैं, यह "जेएसएफ-ईश" तरीका नहीं होगा और भविष्य में आश्चर्य से बचने के लिए आपको इसके बारे में दो बार सोचना पड़ सकता है। – BalusC

6

जेएसएफ स्वचालित रूप से आईडी को उपसर्ग करता है। आप बस आईडी लिखते हैं = "कॉलम" सृजित HTML ऐसे पहचानकर्ता शामिल होंगे:

MyForm: 0: स्तंभ MyForm: 1: स्तंभ MyForm: 2: स्तंभ

और इतने पर।

वैसे भी: जेएसएफ टेम्पलेट्स में जेएसटीएल टैग (जैसे सी: फोरैच और सी: अगर) का कभी भी उपयोग न करें। वे यादृच्छिक व्यवहार का कारण बनते हैं, डीबग करना बहुत मुश्किल है। और यदि वे काम करते हैं, तो एप्लिकेशन को धीमा कर दें।

यूई का उपयोग करें: लूप के लिए दोहराना, और ui: सशर्त ब्लॉक के लिए टुकड़ा। ध्यान दें कि सी: सेट के लिए कोई प्रतिस्थापन नहीं है, ऐसे निर्माण जेएसएफ 2 में मौजूद नहीं हैं।

+1

डाउनवोट क्यों? स्पष्टीकरण की आवश्यकता है। – xiefei

+0

एक आकर्षण की तरह काम किया और यह एक महान स्पष्टीकरण था।मैं यह भी सोच रहा हूं कि इसे डाउनवोट क्यों मिला, लेकिन मैं बहुत उत्साहित होने के बाद से ऊपर हट जाऊंगा। –

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