दिलचस्प पोस्ट
मैं वीबीए में एक "जैज वाला सरणी" कैसे स्थापित करूं? जावास्क्रिप्ट पायथन के ज़िप फ़ंक्शन के बराबर है विजुअल स्टूडियो 2010 और VB.NET में वैश्विक चर की घोषणा करें JBoss 7.1 के साथ log4j का उपयोग करना सीएक्सएफ 2.4.2: नेमस्पेस http://schemas.xmlsoap.org/soap/http के लिए कोई कंडिट सर्किट नहीं मिला था त्रुटि: कार्य निष्पादन के लिए विफल ': ऐप: transformClassesWithDexForDebug' खड़ी स्क्रॉल पर आधारित jquery के साथ कक्षा जोड़ें / निकालें? बाकी मानक: पथ पैरामीटर या अनुरोध पैरामीटर फ़ायरफ़ॉक्स विस्तार में पैनल से बचें "सज्जाकार" क्या हैं और उनका उपयोग कैसे किया जाता है? विज़ुअल स्टूडियो डिज़ाइन मोड त्रुटियों का निवारण और डीबग कैसे करें? नए हैशिंग एल्गोरिथ्म के लिए पुराने पासवर्ड चलाना? जावा में आलसी धागा-सुरक्षित सिंगलटन तात्कालिकता के लिए पैटर्न तोड़ जब अपवाद फेंक दिया जाता है निर्भरता इंजेक्शन कंटेनर के लाभ क्या हैं?

मैं JSF घटक का आईडी कैसे जान सकता हूं ताकि मैं जावास्क्रिप्ट में उपयोग कर सकूं

समस्या: कभी-कभी आप getElementById साथ जावास्क्रिप्ट से एक घटक का उपयोग करना चाहते हैं, लेकिन getElementById जेएसएफ में गतिशील रूप से उत्पन्न होते हैं, इसलिए आपको ऑब्जेक्ट आईडी प्राप्त करने की एक विधि की आवश्यकता है। मैं नीचे इस बात का उत्तर देता हूं कि आप यह कैसे कर सकते हैं


मूल प्रश्न: मैं नीचे की तरह कुछ कोड का उपयोग करना चाहता हूं। मैं अपने जावास्क्रिप्ट में इनपुट टेक्स्ट जेएसएफ घटक कैसे संदर्भ कर सकता हूं?

 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <head> <title>Input Name Page</title> <script type="javascript" > function myFunc() { // how can I get the contents of the inputText component below alert("Your email address is: " + document.getElementById("emailAddress").value); } </script> </head> <h:body> <f:view> <h:form> Please enter your email address:<br/> <h:inputText id="emailAddresses" value="#{emailAddresses.emailAddressesStr}"/> <h:commandButton onclick="myFunc()" action="results" value="Next"/> </h:form> </f:view> </h:body> </html> 

अद्यतन : इस पोस्ट में क्लाइंट पहचानकर्ता JSF2.0 में इस तरह की तकनीक का उपयोग करने की चर्चा करता है:

 <script type="javascript" > function myFunc() { alert("Your email address is: " + document.getElementById("#{myInptTxtId.clientId}").value); } </script> <h:inputText id="myInptTxtId" value="backingBean.emailAddress"/> <h:commandButton onclick="myFunc()" action="results" value="Next"/> 

यह सुझाव देते हुए कि inputText पर विशेषता id एक ऐसा ऑब्जेक्ट बनाता है जिसे उपरोक्त उदाहरण में #{myInptTxtId} का उपयोग करते हुए ईएल से एक्सेस किया जा सकता है। यह लेख यह getClientId() कि जेएसएफ 2.0 ने शून्य-तर्क getClientId() विधि को getClientId() वर्ग को जोड़ता है। इसके द्वारा घटक के वास्तविक उत्पन्न आईडी प्राप्त करने के लिए #{myInptTxtId.clientId} का सुझाव दिया गया।

हालांकि मेरे परीक्षणों में यह काम नहीं करता है कोई और पुष्टि कर सकता / अस्वीकार कर सकता है नीचे दिए गए सुझावों की खामियों से पीड़ित हैं कि उपरोक्त तकनीक नहीं है। तो यह जानना अच्छा होगा कि उपरोक्त तकनीक वास्तव में काम करती है।

Solutions Collecting From Web of "मैं JSF घटक का आईडी कैसे जान सकता हूं ताकि मैं जावास्क्रिप्ट में उपयोग कर सकूं"

JSF ने जेनरेट किए गए HTML आउटपुट में असाइन किया गया है, आपको बिल्कुल आईडी का उपयोग करना होगा। अपने वेब ब्राउजर में पेज को राइट क्लिक करें और व्यू सोर्स चुनें । यह वास्तव में एचटीएमएल कोड है जो जेएस देखता है (आप जानते हैं, जे.एस. वेबब्रोवर में चलता है और एचटीएमएल डोम ट्री पर छेड़छाड़ करता है)।

एक को देखते हुए

 <h:form> <h:inputText id="emailAddresses" ... /> 

यह कुछ ऐसा दिखाई देगा:

 <form id="j_id0"> <input type="text" id="j_id0:emailAddress" ... /> 

जहां j_id0 उत्पन्न HTML <form> element की जनरेटेड आईडी है

आप सभी जेएसएफ NamingContainer घटकों को एक निश्चित id देना चाहते हैं ताकि NamingContainer न करें। <h:form> उनमें से एक है

 <h:form id="formId"> <h:inputText id="emailAddresses" value="#{emailAddresses.emailAddressesStr}"/> 

इस तरह से फ़ॉर्म को एक स्व- j_id0 आईडी नहीं मिलेगा जैसे j_id0 और इनपुट फ़ील्ड को formId:emailAddress आईडी का एक निश्चित आईडी formId:emailAddress तब आप इसे केवल जेएस में जैसे संदर्भ कर सकते हैं।

 var input = document.getElementById('formId:emailAddress'); 

उस बिंदु से आप हमेशा की तरह जेएस कोड का उपयोग जारी रख सकते हैं। input.value माध्यम से मूल्य हो रही है। मूल्य।

यह भी देखें:

  • कैसे jsf का उपयोग JSF घटकों का चयन करने के लिए?

अपने अपडेट के अनुसार अपडेट करें: आप ब्लॉग लेख को गलत समझा। विशेष #{component} संदर्भ से वर्तमान घटक को संदर्भित किया गया है जहां ईएल अभिव्यक्ति का मूल्यांकन किया गया है और यह केवल घटक के किसी विशेष गुण के भीतर काम करता है। जो कुछ भी आप चाहते हैं वह भी निम्नानुसार प्राप्त किया जा सकता है:

 var input = document.getElementById('#{emailAddress.clientId}'); 

के साथ (देखने के लिए binding नोट करें, आपको इसे किसी बीन से बाँध नहीं करना चाहिए)

 <h:inputText binding="#{emailAddress}" /> 

लेकिन यह बहुत ही बदसूरत है निम्नलिखित दृष्टिकोण का बेहतर उपयोग करें जिसमें आप जेनरेट किए गए HTML DOM तत्व को फ़ंक्शन के जावास्क्रिप्ट के रूप में पास करते हैं

 <h:inputText onclick="show(this)" /> 

साथ में

 function show(input) { alert(input.value); } 

यदि आप jQuery का उपयोग कर रहे हैं, तो आप मार्कर इंटरफ़ेस के रूप में एक स्टाइल कक्षा का उपयोग करके उन्हें समतल करके एक कदम आगे भी जा सकते हैं

 <h:inputText styleClass="someMarkerClass" /> 

साथ में

 $(document).on("click", ".someMarkerClass", function() { var $input = $(this); alert($input.val()); }); 

उत्तर: तो यह तकनीक है जिसकी मैं खुश हूं। किसी घटक के आईडी को निकालने के लिए बहुत अजीब सामान की आवश्यकता नहीं होती है इस पूरे बिंदु को याद रखें ताकि आप अपने पृष्ठ पर कहीं से भी एक घटक का id जान सकें, केवल वास्तविक घटक से ही नहीं। यह महत्वपूर्ण है मैं एक बटन दबाता हूं, जावास्क्रिप्ट समारोह को लॉन्च करता हूं, और इसे किसी भी अन्य घटक तक पहुंचने में सक्षम होना चाहिए, न कि केवल इसे लॉन्च किया गया।

इस समाधान के लिए किसी भी 'राइट-क्लिक' की आवश्यकता नहीं है और देखें कि आईडी क्या है। उस प्रकार का समाधान भंगुर होता है, क्योंकि आईडी गतिशील रूप से उत्पन्न होती है और यदि मैं पृष्ठ बदलता हूं तो मुझे हर बार उस बकवास के माध्यम से जाना होगा।

  1. घटक बैकिंग बीन से बाँध लें।

  2. जहाँ भी आप चाहते हैं, वहां बाउंड घटक का संदर्भ लें

तो यह एक नमूना है कि यह कैसे किया जा सकता है।

धारणाएं: मेरे पास * .xhtml पृष्ठ है (* .jsp हो सकता है) और मैंने एक बैकिंग बीन को परिभाषित किया है मैं भी JSF 2.0 का प्रयोग कर रहा हूं I

* .xhtml पृष्ठ

 <script> function myFunc() { var inputText = document.getElementById("#{backBean.emailAddyInputText.clientId}") alert("The email address is: " + inputText.value ); } </script> <h:inputText binding="#{backBean.emailAddyInputText}"/> <h:commandButton onclick="myFunc()" action="results" value="Next"/> 

BackBean.java

 UIInput emailAddyInputText; 

इस संपत्ति के लिए भी आपका गेस्टेटर / सेटर बनाने के लिए सुनिश्चित करें

आईडी गतिशील रूप से उत्पन्न होता है, इसलिए आपको सभी मूल तत्वों के लिए नाम परिभाषित करना चाहिए ताकि j_id123-like आईडी से बचें।

नोट करें कि यदि आप तत्व का चयन करने के लिए jQuery का उपयोग करते हैं – इससे पहले कि आप कोलन से पहले दोहरे स्लैश का उपयोग करना चाहिए:

  jQuery("my-form-id\\:my-text-input-block\\:my-input-id") 

के बजाय:

  jQuery("my-form-id:my-text-input-block:my-input-id") 

रिचफेस के मामले में आप जेएसएफ पेज पर एल एक्सप्रेशन का उपयोग कर सकते हैं:

  #{rich:element('native-jsf-input-id')} 

जावास्क्रिप्ट तत्व का चयन करने के लिए, उदाहरण के लिए:

  #{rich:element('native-jsf-input-id')}.value = "Enter something here"; 

जब यह उत्पन्न होता है तो आप HTML स्रोत देख सकते हैं और देख सकते हैं कि आईडी क्या सेट है, इसलिए आप इसका उपयोग अपने जावास्क्रिप्ट में कर सकते हैं। चूंकि यह एक रूप में है, यह संभवतया उसे प्रपत्र आईडी के लिए अग्रिम कर रहा है।

मुझे पता है कि यह जेएसएफ का तरीका नहीं है, लेकिन अगर आप आईडी दर्द से बचने के लिए चाहते हैं तो आप चयनकर्ता के लिए विशेष सीएसएस वर्ग सेट कर सकते हैं। सिर्फ एक अच्छे नाम का उपयोग करना सुनिश्चित करें ताकि जब कोई कक्षा के नाम को पढ़ सके, तो यह स्पष्ट है कि इसका उपयोग इस प्रयोजन के लिए किया गया था

 <h:inputText id="emailAddresses" class="emailAddressesForSelector"... 

आपके जावास्क्रिप्ट में:

 jQuery('.emailAddressesForSelector'); 

बेशक आपको अभी भी मैन्युअल रूप से वर्ग नाम विशिष्टता प्रबंधन करना होगा। मुझे लगता है कि जब तक आप इसे पुन: प्रयोज्य घटकों में नहीं उपयोग करते हैं, तब तक यह उचित है उस स्थिति में आप एक सम्मेलन का उपयोग करके वर्ग नाम उत्पन्न कर सकते हैं।