2009-10-02 7 views
6

मैं वसंत 3.0 प्रलेखन की धारा 5.7.4.3 में वर्णित की तरह अपने वेब आवेदन के लिए मान्यता को लागू करने की कोशिश की:स्प्रिंग JSR303 सत्यापन स्प्रिंग प्रलेखन में वर्णित तरह काम नहीं करता

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="webBindingInitializer"> 
     <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"> 
      <property name="validator"> 
       <bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" /> 
      </property> 
     </bean> 
    </property> 
</bean> 

मैं एक के रूप में हाइबरनेट-सत्यापनकर्ता जोड़ दिया है निर्भरता और सब कुछ ठीक लग रहा है, लेकिन निम्न त्रुटि में अपने वेब एप्लिकेशन परिणाम शुरू करने:

org.springframework.beans.NotWritablePropertyException: 
Invalid property 'validator' of bean class 
[org.springframework.web.bind.support.ConfigurableWebBindingInitializer]: 
Bean property 'validator' is not writable or has an invalid setter method. 
Does the parameter type of the setter match the return type of the getter? 

जब एपीआई यह बहुत स्पष्ट है कि कुछ गलत है पर देख रहे हैं। LocalValidatorFactoryBean लागू javax.validation.Validator जबकि ConfigurableWebBindingInitializer.setValidator()org.springframework.validation.Validator की अपेक्षा करता है।

इसके लिए कोई समाधान?

संपादित

बारे LocalValidatorFactoryBean:

This is the central class for javax.validation (JSR-303) setup in a Spring application context: It bootstraps a javax.validation.ValidationFactory and exposes it through the Spring Validator interface as well as through the JSR-303 Validator interface and the ValidatorFactory interface itself.

एलेक्स मार्शल की तरह इस नीचे वर्णित नहीं मामला है। LocalValidatorFactoryBean केवल javax.validation.Validator लागू करता है।

LocalValidatorFactoryBeanSpringValidatorAdapter का विस्तार करता है, जो org.springframework.validation.Validator लागू करता है।

+0

मैंने 'हाइबरनेट-कोर-3.5.0.बीटा -1' को अपडेट करने का भी प्रयास किया लेकिन स्प्रिंग के हाइबरनेट कोड इस संस्करण के साथ संगत नहीं है। – Koraktor

+1

http://jira.springframework.org/browse/SPR-6189 पर एक जेरा मुद्दे खोल दिया। – Koraktor

उत्तर

6

में अपने JIRA समस्या ट्रैकर में इस के लिए एक मुद्दा बनाना चाहिए यहाँ इस समस्या के लिए एक समाधान है:

ऊपर दिए गए मेरे प्रश्न से validator बीन कॉन्फ़िगरेशन का उपयोग करके आपको सत्यापन का उपयोग करके प्रत्येक नियंत्रक में निम्न कोड जोड़ना होगा।

@Autowired 
private javax.validation.Validator validator; 

@InitBinder 
protected void initBinder(WebDataBinder binder) { 
    binder.setValidator((org.springframework.validation.Validator) this.validator); 
} 

यह गंदा है, लेकिन यह काम करता है क्योंकि LocalValidatorFactoryBeanSpringValidatorAdapter प्रदान करता है और यह लागू करता org.springframework.validation.Validator

4

यदि आप Javadocs for ConfigurableWebBindingInitializer पर देखते हैं, तो इसकी संपत्ति 'सत्यापनकर्ता' प्रकार 'org.springframework.validation.Validator' है। यदि आप Javadocs for LocalValidatorFactoryBean देखें, तो आप देखेंगे कि यह वास्तव में न तो फैक्ट्रीबीन (एक org.springframework.validation.Validator बनाने के लिए) लागू करता है और न ही यह org.springframework.validation.Validator को लागू करता है। इसलिए आप बीन हैं कॉन्फ़िगर करने योग्य WebBindingInitializer की 'सत्यापनकर्ता' संपत्ति को गलत प्रकार का है, जैसा कि त्रुटि द्वारा इंगित किया गया है। मुझे लगता है कि यह एक (सकल?) वसंत डेवलपर्स की ओर से निरीक्षण है, और आप jira.springframework.org

+0

तो मेरा पहला संदेह सही था। इसकी पुष्टि करने के लिए धन्यवाद। मैं एक बग फाइल करने की कोशिश करूंगा। – Koraktor

+1

इसे एक सकल निरीक्षण कहने के लिए असफल, यह देखते हुए कि स्प्रिंग 3 अभी भी परीक्षण में है। – skaffman

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