2009-06-14 11 views
12

मैंने इन विषयों पर spring2.5 पर कुछ पुस्तकें पढ़ी हैं, लेकिन अभी भी @initBinder का उपयोग करने के लिए अवधारणाओं को नहीं पकड़ सकते हैं। क्या कोई भी किसी भी संदर्भ को साझा कर सकता है या समझा सकता है कि मैं वेब एप्लिकेशन पर किस स्थिति का उपयोग कर सकता हूं? संपत्ति एडिटर उससे कैसे संबंधित है?वसंत initBinder और webbindinginitializer उदाहरण

उत्तर

14

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

ऐसा करने का सबसे आम कारण यह है कि जब आप अपने मॉडल पर अनुरोध पैरामीटर को बाध्य करने का प्रयास करते हैं, तो उदाहरण के लिए यदि आपके मॉडल में कस्टम डेटाटाइप हैं जो वसंत बॉक्स से बाहर नहीं हो सकता है। आप WebDataBinder के विरुद्ध अपने PropertyEditors को पंजीकृत करते हैं। एक छोटा सा उदाहरण होगा यदि आप अपने मॉडल में जोडाटाइम लाइब्रेरी का उपयोग करते हैं, और आप जोडा डेटटाइम ऑब्जेक्ट पर टाइमस्टैम्प स्ट्रिंग को बांधना चाहते हैं।

स्प्रिंग 2.0 के साथ, आप नियंत्रक सुपरक्लास से संरक्षित initBinder() विधि को ओवरराइड करने के लिए उपयोग करते हैं, लेकिन स्प्रिंग 2.5 इसे करने की आवश्यकता को हटा देता है, तो आप अब एनोटेशन का उपयोग कर सकते हैं।

7

क्या उल्लेख किया skaffman बगल में एक और कारण देखते हैं, अपने WebDataBinder पर एक कस्टम सत्यापनकर्ता स्थापित करने के लिए किया जाएगा। मैं आमतौर पर जेएसआर -303 बीन सत्यापन का उपयोग करता हूं, और उसके बाद एक वैधकर्ता बांधता है जो जेएसआर -303 द्वारा प्रदान नहीं किया गया अतिरिक्त सत्यापन प्रदान करता है।

अपने नियंत्रक के अंदर:

@InitBinder 
protected void initBinder(WebDataBinder webDataBinder) { 
    Validator validator = webDataBinder.getValidator(); 
    webDataBinder.setValidator(new UserFormValidator(validator)); 
} 

मैं क्या कर रहा हूँ सेम सत्यापनकर्ता में ले जा रहा है, बुला कि अपने कस्टम validator के अंदर, और उसके बाद अपने कस्टम सत्यापन बुला। कुछ ऐसा:

public class UserFormValidator implements Validator { 

    private Validator validator; 

    public AuthUserFormValidator(Validator validator) { 
     this.validator = validator; 
    } 

    @Override 
    public boolean supports(Class<?> clazz) { 
     return UserForm.class.equals(clazz); 
    } 

    @Override 
    public void validate(Object target, Errors errors) { 

     // Run the bean validation... 

     validator.validate(target, errors); 

     // Do your custom validation on userForm here... 

     UserForm userForm = (UserForm) target; 

     // Validation on userForm... 
    } 
} 
संबंधित मुद्दे