2010-10-19 7 views
27

मुझे पता है कि prependId=false करता है। यह ध्वज सेट करता है ताकि फॉर्म की आईडी फॉर्म बच्चे की आईडी को पूर्ववत न करे, लेकिन क्यों? किसी भी विशेष कारण से आप आईडी को प्रीपेड करना चाहते हैं या नहीं?जेएसएफ: क्यों preendId = एक रूप में गलत?

+1

संबंधित: http://stackoverflow.com/questions/7415230

अन्यथा, RichFaces का उपयोग कर, jQuery का उपयोग कर आईडी से एक elmement पर प्राप्त करने के लिए बिना आप की तरह एक बदसूरत एस्केप अनुक्रम का उपयोग करना होगा/jsf-namingcontainer-and-uiform-with-prependid/tl; dr: बस इसका उपयोग न करें, कभी भी। – BalusC

उत्तर

36

मेरे अनुभव में, मैं इस विशेषता का कभी भी उपयोग नहीं करता हूं। हालांकि, कुछ मामलों में यह उपयोगी हो सकता है।

जब आप फेसलेट का उपयोग करते हैं, तो आप टेम्पलेट बना सकते हैं या किसी अन्य पृष्ठ के अंदर पेज शामिल कर सकते हैं। तो आप कल्पना कर सकते हैं कि एक पेज को कई अलग-अलग पृष्ठों में शामिल किया जा सकता है। my-page.xhtml में,

<h:form id="form2"> 
    <ui:include src="pages/my-page.xhtml"/> 
    ... 
</h:form> 

अब, आप:

पृष्ठ 1:

<h:form id="form1"> 
    <ui:include src="pages/my-page.xhtml"/> 
    ... 
</h:form> 

पेज 2 अलग आईडी के साथ उदाहरण लें, जहां माता-पिता पृष्ठों एक form होते हैं, <h:inputText id="foo"/> है। पहले मामले में, इनपुट की असली आईडी form1:foo होगी, जबकि दूसरे मामले में, यह form2:foo होगा। यह जटिल स्थितियों को बना सकता है यदि आपको जावास्क्रिप्ट या जावा में इस घटक की सीधी पहुंच की आवश्यकता है (findComponent("...") विधि का उपयोग करके)।

आप prependId="false" (या कुछ घटकों forceId="true" पर) का उपयोग करते हैं, असली आईडी बस foo हो जाएगा, और फिर अपना कोड के रूप में आप इनपुट क्षेत्र के कंटेनर के बारे में परवाह नहीं होगा आसान हो जाएगा।

हालांकि, अगर आप इस विशेषता को ध्यान से उपयोग करने के लिए, के रूप में यदि कोई डुप्लीकेट आईडी त्रुटि अगर आप इस prepend भी अक्सर विशेषता का उपयोग मिल सकता है, जहां हम स्थापित करने के लिए इस ध्वज मामले में है होगा ...

+6

सहमत हुए। हालांकि, यदि आप 'इस' कीवर्ड को स्मार्ट तरीके से उपयोग कर रहे हैं तो जेएस एक्सेस को सरल बनाया जा सकता है :) – BalusC

+0

प्रीपेडआईडी = "सच" के साथ, घटक आईडी फॉर्म नाम के साथ उपसर्गित है। यह उपयोगी है यदि आपके पास एक ही आईडी के साथ एक ही .xhtml फ़ाइल में दो अलग-अलग रूपों में एकाधिक घटक हैं। – bilelovitch

2

एक परिदृश्य प्राइमफेस लाइब्रेरी के स्वत: पूर्ण नियंत्रण का।

जब मैं प्राइमफ़ेस लाइब्रेरी के स्वत: पूर्ण नियंत्रण का प्रयास कर रहा था तो मुझे यह झंडा झूठा सेट करना पड़ा। मैं स्वतः पूर्ण काम नहीं कर पाया लेकिन इस ध्वज को स्थापित करने के बाद यह ठीक काम करता था। आप इस समस्या

WARN [Parameters] Parameters: Invalid chunk ignored. warning coming in primefaces application

7

मैं कभी कभी prependId जोड़ने के लिए अपने आईडी कक्षाएं आसान के माध्यम से स्टाइल तत्वों बनाने के लिए पसंद करते हैं के बारे में मेरे सवाल के लिए इस लिंक देख सकते हैं। उदाहरण के लिए, एक रूप है:

<h:form id="myform" ... > 
    <h:inputText id="mytext" ... /> 
</h:form> 

आप myform:mytext का एक आईडी दे सकते हैं। जैसा कि कोलन सीएसएस में आरक्षित है, आपको #myform\:mytext { ... } जैसे कुछ पढ़ने के लिए सीएसएस से बचना है, जिसे मैं नहीं करना पसंद करता हूं। prependId="false" के साथ मैं सिर्फ #mytext { ... } जो बहुत सरल & पढ़ने के लिए अच्छे है उपयोग करने के लिए मिलता है। यह कम या सास जैसे सीएसएस प्रीप्रोसेसरों के साथ अच्छा खेलता है।

+5

javax.faces.SEPARATOR_CHAR का उपयोग करने का एक विकल्प होगा - यह आपको ":" के बजाय एक और विभाजक चरित्र का उपयोग करने की अनुमति देता है। – sleske

+0

स्पष्टीकरण के लिए: @Lee Theobald स्पष्ट रूप से "कॉलन" का मतलब था "अर्ध-कॉलन के रूप में ..."। –

+0

मैंने किया था। उचित जवाब फिक्स्ड। –

8

ऐसी स्थिति जहां प्रीपेन्ड आईडी = झूठी उपयोगी है, यदि आप स्प्रिंग सिक्योरिटी का उपयोग कर रहे हैं, क्योंकि इनपुटटेक्स के आईडी को "j_username" और "j_password" होना चाहिए। इसलिए आपको उनके सामने फॉर्म आईडी नहीं डालना चाहिए, और prependId = false का उपयोग करना इसे स्वीकार करने के लिए एक अच्छा विकल्प है।

3

सीएसएस चयनकर्ताओं को आसान बनाने के अलावा, prependId=false का उपयोग करके विशिष्ट तत्वों तक पहुंचने के लिए जावास्क्रिप्ट और jQuery का उपयोग करना आसान हो जाता है।

jQuery("form-id\\:element-id") 
+0

सीएसएस छद्म वर्ग का प्रयोग करें। जेएसएफ कक्षा के नामों को कभी संशोधित नहीं करता है, इसलिए आप '$ (। MyClass) 'का उपयोग करके विशेषता का उपयोग कर सकते हैं। –