在任何人说这是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));
}
}