【问题标题】:Programmatically configuration of the ResourceBundleMessageSource以编程方式配置 ResourceBundleMessageSource
【发布时间】:2012-01-03 17:46:53
【问题描述】:

我正在尝试以编程方式配置 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;
    }
}

我的初始化器是这样的:

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???

不知道是路径有问题还是需要放更多参数。

【问题讨论】:

  • 尝试resource.setBasename("classpath:messages");
  • 谢谢,但它不起作用。我有点沮丧……
  • 那么我建议你在 ResourceBundleMessageSource 中放置一个断点,看看它试图在哪里找到文件。
  • 好的。代码甚至可以运行。如果我用 XML 配置它,执行将在断点处停止,但如果我使用编程配置,它不会。我将继续调查,但我将仅使用捆绑配置保留 XML。

标签: spring-mvc


【解决方案1】:

终于成功了!问题出在方法名称上。如果要创建一个带有 id 的 bean,则 bean 的 id 就是方法的名称。所以我把方法的名字(configureResourceBundleMessageSource())改成了messageSource()

【讨论】:

  • 或者你可以在注解中指定bean名称:@Bean(name = "messageSource")
猜你喜欢
  • 2015-07-30
  • 2019-03-05
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多