Spring Boot找不到Thymeleaf(消息)属性文件

时间:2018-09-07 10:21:09

标签: java spring spring-boot thymeleaf properties-file

在任何人说这是Spring Boot + Thymeleaf not finding message properties的副本之前,请知道我已经尝试使用链接中提供的答案来解决我的问题,但是到目前为止,对我来说没有任何帮助。

我在使用Thymeleaf和Spring Boot时遇到问题。我遵循了Thymeleaf提供的教程,但是由于某种原因,当模板处理完成时,我得到以下内容:

<!DOCTYPE html>
<html>
<body>
    <h3>??admin.greeting_en??</h3>
    <p>??admin.deposit.request.accepted_en??</p>
    <p><strong>??email.generation_en??</strong></p>
    <p>??email.regards_en??</p>
    <p>??admin.regards_en??</p>
</body>
</html>

我将我的messages_en.properties放置在包含Thymeleaf的Spring配置(模块解析器,消息解析器等)的模块下...路径为notifications / src / main / resources / messages_en.properties

我还将属性文件放置在/ templates目录中,但仍然无法使用。

百里香的设置类如下。

@Configuration
public class SpringMailConfig {

    @Bean
    public MessageSource emailMessageSource() {
        final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("messages");
        return messageSource;
    }


    @Bean
    public TemplateEngine springTemplateEngine() {
        final SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.addTemplateResolver(htmlTemplateResolver());
        templateEngine.setTemplateEngineMessageSource(emailMessageSource());
        return templateEngine;
    }

    private ITemplateResolver htmlTemplateResolver() {
        final ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
        templateResolver.setPrefix("/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setCharacterEncoding(StandardCharsets.UTF_8.name());
        templateResolver.setCacheable(false);
        return templateResolver;
    }
}

例如,在我的属性(messages_en.properties)文件中,我具有:

admin.greeting = Hello, Admin!

这是模板的外观(HTML文件)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
    <h3 th:text="#{admin.greeting}">Dear Admin,</h3>
    <p th:text="#{admin.deposit.request.accepted(${amount}, ${user})}">The deposit request of AMOUNT euro made for user USER has been accepted.</p>
    <p><strong th:text="#{email.generation}">This is an automated email.</strong></p>
    <p th:text="#{email.regards}">Kind Regards,</p>
    <p th:text="#{admin.regards}">Robots</p>
</body>
</html>

没有任何效果,我不知道为什么。在模板内使用变量(由$ {}表示)是可行的,但未找到消息(使用#{})。

这是我用来调用模板引擎的类。方法String returnTemplateHtmlContent(String templatePath, Locale locale, Map<String, Object> map) throws TemplateInputException, NullPointerException是进行实际处理的方法。传递的“区域设置”设置为“ en”,地图包含要插入模板的变量(此方法有效)。

public abstract class AbstractMailHelper {

    SpringTemplateEngine springTemplateEngine;
    protected static final String ENCODING = "UTF-8";

    public AbstractMailHelper() {

    }

    public AbstractMailHelper(SpringTemplateEngine templateEngine) {
        this.springTemplateEngine = templateEngine;
    }

    //Prepares values to be injected into template
    protected Context prepareTemplateContext(Locale locale, Map<String, Object> contextMap) {
        final Context context = new Context(locale);
        context.setVariables(contextMap);
        return context;
    }

    //returns as a string the template with the custom values inserted
    protected String returnTemplateHtmlContent(String templatePath, Locale locale, Map<String, Object> map) throws TemplateInputException, NullPointerException {
        return springTemplateEngine.process(templatePath, prepareTemplateContext(locale, map));
    }
}

0 个答案:

没有答案