2012-06-27 12 views
5

मैं वसंत 3.1.1 और हाइबरनेट-सत्यापनकर्ता 4.3.0 का उपयोग करता हूं। अंतिम और डिफ़ॉल्ट संदेशइंटरपोलेटर बदलने में समस्या है, जो प्रमाणीकरण संदेश (क्लासपाथ में) से सत्यापन संदेश लेता है।वसंत में संदेशइंटरपोलेटर

मैं ResourceBundleMessageInterpolator का उपयोग जो मेरे वसंत messageSource से संदेश ले जाएगा चाहते

मैं अपने आवेदन-context.xml में कुछ इस तरह किया:

<bean id="resourceBundleMessageInterpolator" 
     class="org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator"> 
    <constructor-arg index="0"> 
     <bean class="org.springframework.validation.beanvalidation.MessageSourceResourceBundleLocator"> 
      <constructor-arg index="0" ref="messageSource"/> 
     </bean> 
    </constructor-arg> 
</bean> 
<bean id="validator" 
     class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> 
    <property name="messageInterpolator" ref="resourceBundleMessageInterpolator"/> 
</bean> 

और जब मैं लॉग में अपने वेब आवेदन शुरू मैं देखें:

11:04:07,402 DEBUG [org.hibernate.validator.internal.engine.ConfigurationImpl] - 
Setting custom MessageInterpolator of type 
org.springframework.validation.beanvalidation.LocaleContextMessageInterpolator 
11:04:07,402 DEBUG [org.hibernate.validator.internal.engine.ConfigurationImpl] - 
Setting custom ConstraintValidatorFactory of type org.springframework .validation.beanvalidation.SpringConstraintValidatorFactory 

तो जैसा कि आप देख सकते हैं, यह ResourceBundleMessageInterpolator जो मैं चाहता हूँ नहीं है। यह LocaleContextMessageInterpolator

बाद में जब मैं मैं सिर्फ वसंत संदेश स्रोत से, ValidationMessages.properties से संदेश नहीं कुछ मान्य करने के लिए प्रयास करें:

11:08:09,397 DEBUG [org.hibernate.validator.resourceloading.PlatformResourceBundleLocator] - 
ValidationMessages not found. 
11:08:09,413 DEBUG [org.hibernate.validator.resourceloading.PlatformResourceBundleLocator] - 
org.hibernate.validator.ValidationMessages found. 

आप आवेदन-context.xml से देख सकते हैं मैं उपयोग MessageSourceResourceBundleLocator करना चाहते हैं , लेकिन इसका उपयोग किया जाता है, मुझे नहीं पता कि क्यों PlatformResourceBundleLocator

कोई विचार?

उत्तर

15

आप खुद ResourceBundleMessageInterpolator और MessageSourceResourceBundleLocator सेम की घोषणा करने की जरूरत नहीं है, वे LocalValidatorFactoryBean द्वारा बनाई गई हैं, जब आप messageSource की आपूर्ति (आप के लिए है जब तक):

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> 
    <property name="validationMessageSource" ref="messageSource"/> 
</bean> 

(यह हुड के नीचे करता है :)

public void setValidationMessageSource(MessageSource messageSource) { 
    this.messageInterpolator = HibernateValidatorDelegate.buildMessageInterpolator(messageSource); 
} 

// (...) 


private static class HibernateValidatorDelegate { 

    public static MessageInterpolator buildMessageInterpolator(MessageSource messageSource) { 
     return new ResourceBundleMessageInterpolator(new MessageSourceResourceBundleLocator(messageSource)); 
    } 
} 

तो सरलीकृत बीन परिभाषा के साथ, क्या आपको एक ही डीबग आउटपुट मिलता है? आप "वैधकर्ता" रेफरी का उपयोग कहां करते हैं? उदाहरण के लिए आपको <mvc:annotation-driven validator="validator"> का उपयोग करना पड़ सकता है।

+4

उत्तर के लिए बहुत बहुत धन्यवाद। इससे पहले मैंने लिखा था, जैसा कि आपने लिखा है, setValidationMessageSource के साथ सरल संस्करण का उपयोग किया। व्यवहार वही था जैसा मैंने पहले वर्णित किया था। मामला यह है कि मैंने अपने में एक विशेषता वैधकर्ता = "सत्यापनकर्ता" को याद किया। मैंने विशेषता जोड़ा और यह काम करता है। –

+0

यदि मैं केवल वसंत-वेब मॉड्यूल का उपयोग करता हूं, वसंत-वेबएमवीसी नहीं, तो क्या करना है? –

+0

एनोटेशन आधारित कॉन्फ़िगरेशन में सत्यापनकर्ता रेफरी का उपयोग करने के लिए – karthi