2012-01-03 9 views
4

xmlファイルの代わりにSpring MVCをプログラムで設定しようとしています。ほとんどすべてが正常に動作していますが、ResourceBundleMessageSource宣言に問題があります。ResourceBundleMessageSourceのプログラムによる設定

マイコンフィギュレーションクラス次のようになります。

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages = "xx.xx.xx.spring.controller") 

public class MvcConfig { 

    @Bean 
    public ResourceBundleMessageSource configureResourceBundleMessageSource() { 
     ResourceBundleMessageSource resource = new ResourceBundleMessageSource(); 
     resource.setBasename("messages"); 
     return resource; 
    } 

    @Bean 
    public UrlBasedViewResolver configureUrlBasedViewResolver() { 
     UrlBasedViewResolver resolver = new UrlBasedViewResolver(); 
     resolver.setPrefix("/WEB-INF/jsp/"); 
     resolver.setSuffix(".jsp"); 
     resolver.setViewClass(
      org.springframework.web.servlet.view.JstlView.class); 
     return resolver; 
    } 
} 

そして、このように私の初期化子:

public class Initializer implements WebApplicationInitializer { 

    public void onStartup(ServletContext servletContext) 
      throws ServletException { 

     AnnotationConfigWebApplicationContext mvcContext = 
      new AnnotationConfigWebApplicationContext(); 
     mvcContext.register(MvcConfig.class); 
     mvcContext.setServletContext(servletContext); 
     mvcContext.refresh(); 
     ServletRegistration.Dynamic menu = servletContext.addServlet("menu", 
      new DispatcherServlet(mvcContext)); 
     menu.setLoadOnStartup(1); 
     menu.addMapping("*.html"); 
    } 
} 

アプリケーションが動作しているが、それは/WEB-INF/classes/messages.propertiesに位置していますmessages.propertiesからのメッセージが表示されません。私はxmlファイルを使用する場合、それもうまく動作します。 JSPで

私は

<fmt:message key="heading"/> 

±次の行を持っており、それがブラウザに???heading???のように表示されています。

パスに問題があるかどうかわかりません。または、もっとパラメータを入れる必要があります。

+0

try resource.setBasename( "classpath:messages"); – fmucar

+0

ありがとうございますが動作しません。私はちょっと心配しています... – Quaiks

+0

次に、ResourceBundleMessageSourceにブレークポイントを配置して、ファイルを見つける場所を確認することをお勧めします。 – fmucar

答えて

9

最終的には機能しています!問題はメソッド名にありました。 idを持つBeanを作成する場合、BeanのIDはメソッドの名前です。だから私はmessageSource()にメソッド(configureResourceBundleMessageSource())の名​​前を変更しました。

+2

また、アノテーションにBeanの名前を指定することもできます: '@Bean(name =" messageSource ")' –

+1

これは良い推測でした@Quaiks –