2013-04-09 3 views
10

मैं एचटीएमएल उत्पादन निम्नलिखित के रूप में प्रस्तुत करना h:inputText की जरूरत है:एच में नाम विशेषता कैसे निर्दिष्ट करें: inputText?

<input id="yourName" type="text" name="name" /> 
    <input id="email" type="text" name="email" /> 

लेकिन h:inputText renders नाम घटक के ग्राहक आईडी के रूप में ही विशेषता। मैं उसमें क्लाइंट आईडी डालने की बजाय name विशेषता निर्दिष्ट करना चाहता हूं, ताकि इनपुट फ़ील्ड अन्य साइटों पर उसी फ़ील्ड प्रकार के लिए पहले सबमिट किए गए मानों से सार्थक स्वत: पूर्ण सुझाव दिखा सके। उदाहरण के लिए जब मैं ईमेल के लिए इनपुट फ़ील्ड के साथ name="email" का उपयोग करता हूं, तो उपयोगकर्ता को अन्य वेबसाइटों पर पहले सबमिट किए गए ईमेल आईडी के सुझाव दिखाए जाते हैं।

+0

http के लिए क्या देख रहे है।कॉम/प्रश्न/685 9 520/जोड़-कस्टम-विशेषता-एचटीएमएल 5-सपोर्ट-टू-जेएसएफ-2-0-uiinput-घटक – Daniel

उत्तर

14

आप इसे <h:inputText> का उपयोग करके प्राप्त नहीं कर सकते हैं। इसका नाम क्लाइंट आईडी के आधार पर जेएसएफ द्वारा स्वत: उत्पन्न किया गया है (जो बदले में घटक आईडी और इसके सभी नामकरण कंटेनर माता-पिता के आधार पर है)।

आप वैसे भी ठोस कार्यात्मक आवश्यकता को प्राप्त करने के मूल रूप से 2 विकल्प है:

  1. कोई अन्य नामकरण कंटेनर माता-पिता नहीं हैं, तो माता-पिता के फार्म का निर्देश देने की अपनी आईडी पहले जोड़ें नहीं:

    <h:form prependId="false"> 
    

    हालांकि यह असफल होने के लिए <f:ajax> का कारण बन जाएगा।

  2. उपयोग सादे HTML JSF घटकों के बजाय तत्वों:

    <input name="name" value="#{bean.name}" /> 
    <input name="email" value="#{bean.email}" /> 
    

    आप केवल @ManagedProperty के माध्यम से उन्हें अपने आप को इकट्ठा करने के लिए एक अनुरोध पर सेम scoped:

    @ManagedProperty("#{param.name}") 
    private String name; 
    
    @ManagedProperty("#{param.email}") 
    private String email; 
    

    और तुम JSF builtin को खो देंगे सत्यापन/रूपांतरण सुविधा और AJAX जादू।

हालांकि एक पूरी तरह से अलग विकल्प है: HTML5 <input type="email"> का उपयोग करें। इस तरह ब्राउज़र सभी पहले दर्ज किए गए ईमेल को उसी प्रकार के इनपुट पर स्वत: सुझाव देगा। यह <h:inputText> द्वारा मूल रूप से समर्थित नहीं है। JSF 2.2 के रूप में आप अंत में आसानी से एक कस्टम किट प्रदान की जरूरत के बिना passthrough attributes घोषणा कर सकते हैं

<h:inputText type="email" ... /> 

अद्यतन: आप फिर भी एक कस्टम के रूप में Adding custom attribute (HTML5) support to Primefaces (3.4) में उत्तर दिया, यह काम करने के लिए प्राप्त करने के लिए किट प्रदान कर सकते हैं।

<... xmlns:a="http://xmlns.jcp.org/jsf/passthrough"> 
... 
<h:inputText a:type="email" ... /> 
+0

काम का एक और क्लासिक टुकड़ा –

+0

@ बालससी 'प्रीपेन्डआईडी = "झूठी" क्यों जोड़ना '' असफल होना? – Tarik

+3

@ तारिक: इसे निष्पादित करने के लिए घटक नहीं मिल रहे हैं। बस 'prependId = "false" का उपयोग न करें। उन्हें जेएसएफ 1.2 में कभी नहीं जोड़ा जाना चाहिए था। – BalusC

-1

आप नाम विशेषता निर्दिष्ट किए बिना जो भी करना चाहते हैं वह करने में सक्षम हैं। आईडी विशेषता पर्याप्त है। एक उदाहरण के अनुसार निम्नलिखित का प्रयास करें: // stackoverflow:

< h:inputText id="email" ... /> 

... 
$("#email input").click(function (event) { 
... 
} 

बजाय

की
$("#email input[name='email']").click(function (event) 

आशा यह आप :)

+1

यह ** ** ** पृष्ठ में सेट किसी अन्य विशेषता के बिना काम करने जा रहा है और उन विशेषताओं ** का उपयोग नहीं किया जाना चाहिए **। स्वीकृत उत्तर में बिंदु 1 देखें। जिस व्यक्ति ने इसे ऊपर उठाया है उसे स्वीकार किए गए उत्तर को भी पढ़ना चाहिए ... – Kukeltje

+0

शायद मैंने इसे शुरुआत में नहीं पकड़ा (सोचा था कि यह एक जेएस कॉल था)। लेकिन अगर मैं अब निम्न वाक्यविन्यास वाले लोगों को कॉल करने के लिए गुण फ़ाइल का उपयोग कर सकता हूं: value = "# {prefix.properties}" – Henz

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