2012-01-08 22 views
5

क्या मैं faces-config.xml में एक कस्टम सत्यापनकर्ता पंजीकृत कर सकता हूं यदि मैं जेएसएफ 2.0.4 का उपयोग कर रहा हूं? मेरा कस्टम सत्यापनकर्ता वैलिडेटर इंटरफ़ेस का उपयोग करता है जो javax.faces.validator.Validator है।एक समग्र घटक के अंदर एक इनपुट घटक के लिए एक वैधकर्ता कैसे निर्दिष्ट करें?

<cc:myComp id="customcomp1" ... /> 

<cc:myComp id="customcomp2" ...> 
    <f:validator id="myvalidator" for="myComp" /> 
</cc:myComp> 

myComp.xhtml

<cc:interface> 
    <cc:attribute ... /> 
    <!-- more attributes --> 
</cc:interface> 
<cc:implementation> 
    <h:panelGroup layout="block"> 
     <h:inputText id="firstName" ... /> 
     <h:inputText id="middleName" ... /> 
     <h:inputText id="lastName" ... /> 
    </h:panelGroup> 
</cc:implementation> 
+0

आप एक कस्टम घटक या एक समग्र घटक का उपयोग कर रहे प्रतीत होते हैं। आपको यह दिखाने की ज़रूरत है कि आपने इसे कैसे बनाया है। शायद आपने बस वैधता को सही तरीके से प्रतिनिधि नहीं दिया है। – BalusC

उत्तर

5
अपने अपडेट किए गए सवाल में

कोड उदाहरण के अनुसार, ऐसा लगता है कि आप वैध इनपुट को बिल्कुल सही इनपुट में नहीं दे रहे हैं, इसलिए सत्यापनकर्ता को पूरी तरह से अनदेखा किया जाता है।

<composite:interface> में <composite:editableValueHolder> के रूप में आपको वांछित इनपुट (जिसके लिए आप एक वैधकर्ता संलग्न करना चाहते हैं) को परिभाषित करने की आवश्यकता है।

<cc:interface> 
    <cc:editableValueHolder name="forName" targets="inputId" /> 
    ... 
</cc:interface> 
<cc:implementation> 
    ... 
    <h:inputText id="inputId" ... /> 
    ... 
</cc:implementation> 

ऊपर <composite:editableValueHolder> मूल रूप से बताता है कि किसी भी <f:validator for="forName"><h:inputText id="inputId"> पर लागू किया जाना चाहिए। तो, निम्नलिखित तो यह करना चाहिए:

<cc:myComp> 
    <f:validator id="myValidator" for="forName" /> 
</cc:myComp> 

तुम भी एक ही मूल्य name और targets में उपयोग कर सकते हैं, लेकिन प्रमुख मुद्दा है कि इतना है कि JSF क्या इनपुट घटक पर जानता है वास्तव में वहाँ एक <composite:editableValueHolder> मौजूद होना चाहिए है वैधकर्ता को लक्षित किया जाना चाहिए, आप समग्र रूप से एक से अधिक इनपुट घटक हो सकते हैं, आप देखते हैं।

+0

आपको बहुत बहुत धन्यवाद! –

+0

आपका स्वागत है। आपके और चिचिरय के लिए – BalusC

+0

1 अप। :) –

1

सं JSF 2.0 के साथ आवश्यक नहीं है यही कारण है कि। बस अपने सत्यापनकर्ता को @FacesValidator के साथ एनोटेट करें। एनोटेशन स्वचालित रूप से आपके सत्यापनकर्ता को पंजीकृत करता है। कोई एक्सएमएल की आवश्यकता नहीं है।

+0

किसी कारण से मेरा सत्यापनकर्ता काम नहीं करता है। कृपया –

3

यदि आप जेएसएफ 2 के साथ काम कर रहे हैं, तो मुझे नहीं लगता कि आपको ग्राहक Validator बनाने के लिए faces-config.xml फ़ाइल को स्पर्श करने की आवश्यकता है। Validator घोषित करने के लिए आप एनोटेशन @FacesValidator का उपयोग कर सकते हैं। यह कुछ इस तरह होना चाहिए:

@FacesValidator("myValidator") 
public class MyValidator implements Validator { 

    @Override 
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { 
     // Your logic 
    } 

} 

तो फिर आप अपने .xhtml पेज में इसका उपयोग करने के साथ शुरू कर सकते हैं, उदाहरण के लिए, <f:validator> टैग:

<f:validator validatorId="myValidator" /> 
+0

संपादित करें, जैसा कि मैंने उपरोक्त वर्णित किया है, जैसा कि मैंने ऊपर दिया है लेकिन अभी भी इसे नहीं कहा जा रहा है। –

+0

कृपया मेरे प्रश्न में अद्यतन की जांच करें। –

+1

@Altair: क्या आप अपने 'वैलिडेटर' के साथ-साथ आपके समग्र घटक के लिए कोड पोस्ट कर सकते हैं? एक घटक के लिए एक 'वैलिडेटर' पंजीकृत होना चाहिए, न कि संपूर्ण घटक। –

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