3

ResourceBundleMessageSource メッセージは、Spring の構成ファイルで次のように構成されます。

<bean id="messageSource"
  class="org.springframework.context.support.ResourceBundleMessageSource"
  p:basenames="WEB-INF/strings/appstrings" />

プロパティ ファイルのメッセージを変更するたびに、サーバーを再起動する必要があります。

サーバーを再起動せずに、アプリケーションでこれらの更新されたメッセージをプログラムで読み取りたいです。

@Controllerアプリケーションの実行中にこれらのメッセージをプログラムで読み取るにはどうすればよいですか。

4

2 に答える 2

3

SpringにはReloadableResourceBundleMessageSource(http://static.springsource.org/spring/docs/3.2.x/javadoc-api/org/springframework/context/support/ReloadableResourceBundleMessageSource.html)があり、必要な処理を実行できます。

あなたはstackoverflowでここでより多くの情報を見つけることができます:

于 2013-01-01T10:04:54.363 に答える
0

次のように、applicationContext.xml ファイルで ResourceBundle プロパティを定義します。

<!-- Message Source for appstrings -->
<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="WEB-INF/strings/appstrings" />

</bean>

あなたのJavaクラス/コントローラーでは、次のように自動配線されます。

プライベート ReloadableResourceBundleMessageSource messageSource;

  @Autowired
  public void setMessageSource(MessageSource messageSource) {
    this.messageSource = (ReloadableResourceBundleMessageSource) ((DelegatingMessageSource) messageSource).getParentMessageSource();
  }

次に、そのクラス/コントローラーの任意の関数で clearCache() を呼び出します。

messageSource.clearCache();

コントローラーでこの例外が発生しました

ReloadableResourceBundleMessageSource incompatible with org.springframework.context.support.DelegatingMessageSource

コントローラーで messageSource を介して実行しようとすると、空の文字列が返されます。よく見ると、messageSource プロパティに DelegatingMessageSource があり、親ソースが空であることがわかります。これは、EMPTY であることを意味します。つまり、常に空白を返します。

この小さな課題の解決策は次のとおりです。messageSource 定義を spring-servlet.xml から applicationContext.xml に移動します。

続きを読む..

于 2013-01-01T11:33:57.510 に答える