2

私はSpring 3を使用しており、applicationContext.xmlに次の構成があります:

  <bean id="validationMessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"
    p:basename="classpath:messages/validation_messages" p:defaultEncoding="UTF-8" p:cacheSeconds="3" />

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

すべてがロケールなどで正常に動作します。

しかし、私が構築したカスタムバリデーターにロケールを挿入できるかどうか疑問に思っていました。@CheckZip郵便番号を検証するための注釈を作成しました。しかし、国によって郵便番号の形式が異なるため、現在のロケールをバリデーターに投入できるかどうか知りたいです。

4

1 に答える 1

5

インジェクションによるものではありませんが、静的なLocaleContextHolderがここで役立ちます。

LocaleContextHolder.setLocale(locale); // set locale for your request or based on user settings e.g. inside custom interceptor

LocaleContextHolder.getLocale(); // get locale inside your validator

LocaleChangeInterceptorしかし、すでに機能しているはずのロケールがあるため、明示的にロケールが必要な理由がわかりません。

<!-- Declare the Interceptor -->
<mvc:interceptors>    
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"
          p:paramName="locale" />
</mvc:interceptors>

<!-- Declare the Resolver -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
于 2011-10-07T21:29:43.823 に答える