पर इनपुट फोकस खो रहा है मैं जेएसएफ 2.1.3 के साथ एक सीखने के अभ्यास के रूप में एक स्वत: पूर्ण कस्टम घटक लिख रहा हूं। विचार (जो शायद बहुत परिचित है) और इनपुट घटक में कुछ पाठ दर्ज करना और मिलान मूल्यों के साथ एक सूची बॉक्स प्रस्तुत करना है। विचार इनपुट पर एक कुंजीपटल जावास्क्रिप्ट ईवेंट है जो घटक को अद्यतन करने के लिए jsf.ajax.request() पर कॉल करता है। अब तक मैं एक घटक है जो मैं की तरह शामिल कर सकते हैं इस:जेएसएफ कस्टम घटक AJAX अद्यतन
<mycc:autocomplete id="myauto" searchMethod="#{bean.doSearch}"/>
यह एचटीएमएल इस तरह प्रस्तुत करता है:
<span id="myauto">
<input type="text" id="myauto_input" name="myauto_input"
onkeyup="com.myco.ajaxRequest(this, event)"/>
<select id="myauto_listbox" name="myauto_listbox">
<option value="1st">First</option>
<option value="2nd">Second</option>
</select>
</span>
com.myco.ajaxRequest() जावास्क्रिप्ट समारोह (KeyUp) करता है इस:
jsf.ajax.request(comp, null, {
execute: 'myauto',
render: 'myauto'
});
तो क्योंकि मैं पुनर्निर्माण और सूची, मैं कर रहा हूँ फिर से प्रतिपादन कस्टम घटक 'myauto' सुझावों के साथ लिस्टबॉक्स rerender करना चाहते हैं। निष्पादन निर्दिष्ट करके: 'myauto' decode() विधि निष्पादित करता है और मैं इनपुट मान प्राप्त कर सकता हूं। द्वारा प्रस्तुत करना निर्दिष्ट करें: 'myauto' एन्कोड ...() विधियों को HTML को पुन: उत्पन्न करने के लिए निष्पादित करें।
यह सब ठीक है लेकिन क्योंकि मैं myauto_input घटक के माता-पिता को प्रतिपादित कर रहा हूं, जब भी कुंजीपटल ईवेंट आग लगती है तो मैं इनपुट फोकस खो देता हूं।
अगर मैं की तरह कुछ निर्दिष्ट प्रस्तुत करना: 'myauto_listbox' (मैं केवल वास्तव में करना चाहते rerender लिस्टबॉक्स सब के बाद) समस्या यह है कि एनकोड ...() पद्धतियों निष्पादित नहीं है, क्योंकि वे के लिए कर रहे हैं संपूर्ण रूप से कस्टम घटक, केवल सूची बॉक्स नहीं। और यह एन्कोड में से एक में होगा ...() विधियों का उपयोग मैंने सुझावों वाले सूची बॉक्स को पुनर्निर्माण किया था।
घटक UIInput प्रदान करता है और मैं encodeEnd() विधि में एक अलग रेंडरर (componentFamily = "javax.faces.Input") में मार्कअप उत्पन्न (तो यह हमेशा चलाने वाले किसी भी आपूर्ति कनवर्टर के बाद - अभी तक लागू नहीं)। मुझे लगता है कि जो जावास्क्रिप्ट से फ़ोकस को मजबूर करना एक भयानक हैक है और इससे बचा जा सकता है।
मुझे थोड़ा अनिश्चितता है कि इसके साथ कहां जाना है, लेकिन मुझे संदेह है कि मैं जो देख रहा हूं इंगित करता है कि मैं किसी भी तरह गलत तरीके से इस पर आ रहा हूं। यदि कोई सही दिशा में इंगित करने के लिए पर्याप्त होगा, तो मैं की सराहना करता हूं।