以编程方式配置ResourceBundleMessageSource

Qua*_*iks 4 spring-mvc

我试图以Spring MVC编程方式而不是xml文件进行配置.几乎一切都运转良好,但我在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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的初始化程序如下:

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

该应用程序的工作,但它没有显示从消息messages.properties是位于/WEB-INF/classes/messages.properties.如果我使用xml文件,它也可以正常工作.

在JSP中我有以下几行±

<fmt:message key="heading"/>
Run Code Online (Sandbox Code Playgroud)

它就像???heading???在浏览器中一样显示.

我不知道路径是否有问题,或者我需要提出更多的参数.

Qua*_*iks 9

最后它正在工作!问题出在方法名称中.如果要创建具有id的bean,则bean的id是方法的名称.所以我已经将方法(configureResourceBundleMessageSource())的名称更改为messageSource().

  • 或者您可以在注释中指定bean名称:`@Bean(name ="messageSource")` (2认同)