2013-01-01 87 views
2

ResourceBundleMessageSource會消息在Spring的配置文件配置爲編程刷新Spring MVC的資源包

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

每當我改變的任何消息在屬性文件我必須重新啓動服務器。

我想在應用程序中以編程方式讀取這些更新的消息,而無需重新啓動服務器。

如何在運行應用程序時以編程方式在我的@Controller之一中讀取這些消息。

回答

0

定義在applicationContext.xml中的資源包屬性文件,如:

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

</bean> 

在你Java類/控制器自動將它連接爲:

private 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!

Read more..