2012-05-07 4 views
0

私の現在のプロジェクトはカスタマイズされた「システム日付」を必要とします。これは、システム日付とその形式がi18nプロパティファイルで定義されていることを意味します。しかし、それを扱うクラスは一般的なユーティリティクラスですが、Webレイヤー内ではありません。しかし、ロケール(日付形式を解説する)はHttpServletRequestオブジェクトから取得する必要があります。私はそのユーティリティクラスへのHttpServletRequestインスタンスをautowireと考えています。それはデザインパターンを破るようだが、私はそれが海賊であると思う。しかし、それは動作しません。だから何が問題なのですか?また、Springの他のレイヤーでもLocaleを解決する良い方法はありますか?Autowire HttpServletRequest?ロケールを解決するには?

ありがとうございます。

答えて

2

影響を受けるメソッドのパラメータとしてLocaleを受け入れるようにユーティリティクラスを単純にオーバーロードする方が、よりエレガントではないでしょうか。次に、コントローラ内のロケールを取得し、ユーティリティに渡すことができます。

+0

クイックアンサーをありがとうございます。ここでの問題は、システムの日付が明示的な「要求」から取得されないことです。ユーザーがブラウザのWebアプリケーションのURLをヒットしたときにインデックスページに表示されるはずです。任意のURLパターンに基づいてコントローラを作成できますが、 "/"リクエストから明示的なHttpServletRequestインスタンスを取得できますか?ありがとうございました。 – Dreamer

0

Spring FrameworkのSessionLocaleResolverを使用することをお勧めします。セッション内でロケールが変更されて保存されるため、アプリケーション内の任意のコードポイントでそのロケールを取得できます。

以下の設定を参照してください。また、Springのドキュメンテーションを読んで理解してください。

<mvc:interceptors> 
     <ref bean="localeChangeInterceptor"/> 
    </mvc:interceptors> 

    <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
     <property name="paramName" value="lang"/> 
    </bean> 

    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"> 
     <property name="defaultLocale" value="en"/> 
    </bean> 

    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
     <property name="basenames"> 
     <list> 
      <value>/WEB-INF/i18n/labels</value> 
      <value>/WEB-INF/i18n/messages</value> 
     </list> 
     </property> 
     <property name="defaultEncoding" value="UTF-8"/> 
    </bean> 

希望します。乾杯。

関連する問題