Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring4中的thymeleaf国际化无法识别来自资源属性文件的消息_Java_Spring_Spring Mvc_Thymeleaf - Fatal编程技术网

Java Spring4中的thymeleaf国际化无法识别来自资源属性文件的消息

Java Spring4中的thymeleaf国际化无法识别来自资源属性文件的消息,java,spring,spring-mvc,thymeleaf,Java,Spring,Spring Mvc,Thymeleaf,使用Spring 4+thymeleaf开发我的webapp以支持国际化。我尝试了很多方法来更改basename的位置文件和配置,但仍然收到??label.greeting_**??在模板结果上。下面是我的代码 @Configuration @EnableSpringConfigured @EnableWebMvc @EnableScheduling @ComponentScan(basePackages = {"com.categorybags.web.controller", "com.ca

使用Spring 4+thymeleaf开发我的webapp以支持国际化。我尝试了很多方法来更改basename的位置文件和配置,但仍然收到??label.greeting_**??在模板结果上。下面是我的代码

@Configuration
@EnableSpringConfigured
@EnableWebMvc
@EnableScheduling
@ComponentScan(basePackages = {"com.categorybags.web.controller", "com.categorybags.persistence.services"})
public class WebMvcConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/res/**").addResourceLocations("/res/");
    }

    @Bean
    public ViewResolver viewResolver() {
        ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
        templateResolver.setCacheable(false);
        templateResolver.setPrefix("/WEB-INF/jsp/");
        templateResolver.setSuffix(".jsp");
        templateResolver.setTemplateMode("HTML5");

        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver);

        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setCharacterEncoding("UTF-8");
        viewResolver.setOrder(1);
        viewResolver.setTemplateEngine(templateEngine);

        return viewResolver;
    }

    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver localeResolver = new SessionLocaleResolver();
        localeResolver.setDefaultLocale(new Locale("en"));
        return localeResolver;
    }

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
        localeChangeInterceptor.setParamName("lang");
        return localeChangeInterceptor;
    }

    @Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("WEB-INF/messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }
}

属性文件位于WEB-INF下,路径是src\main\webapp\WEB-INF\messages\u en.properties和src\main\webapp\WEB-INF\messages\u ch.properties

我想我能够重现您的问题,只需将
视图解析器
注册到Spring,而不是
SpringTemplateEngine
ServletContextTemplateResolver

因此,我认为您应该尝试稍微拆分配置,以便将这两个其他组件注册到spring容器中。代码如下:

@Bean
public ServletContextTemplateResolver templateResolver() {
    ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
    templateResolver.setCacheable(false);
    templateResolver.setPrefix("/WEB-INF/jsp/");
    templateResolver.setSuffix(".jsp");
    templateResolver.setTemplateMode("HTML5");
    return templateResolver;
}

@Bean
public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    templateEngine.setTemplateResolver(templateResolver());
    return templateEngine;
}

@Bean
public ViewResolver viewResolver() {
    ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
    viewResolver.setTemplateEngine(templateEngine());
    viewResolver.setCharacterEncoding("UTF-8");
    viewResolver.setOrder(1);
    return viewResolver;
}

显示的标签是什么:?标签。问候语?您是否放置了“”?它应该是??标签。问候语??或??标签。问候语??或LocaleResolver检测到的任何区域设置。此外,在配置LocaleResolver时,可能只需要尝试使用Locale.ENGLISH实例,这比创建新的Locale实例要好。@m4rtin它们是??label.greeting\u en??和??label.greeting_ch??,取决于LocalResolver检测到的语言。并切换到Locale.ENGLISH不会对结果进行任何更改。非常感谢!它解决了我的问题,是因为缺少Spring需要的templateResolver或templateEngine吗?是的,这并不明显,但我认为在某些情况下,Spring和Thymeleaf需要这些依赖项来解决国际化消息(以及其他问题)。对,所有人都指责他们的文档:)