当前位置: 首页 > 知识库问答 >
问题:

Thymeleaf模板不解析属性

朱渝
2023-03-14

我需要使用Thymeleaf模板为不同地区发送电子邮件。

我的HTML中有下一部分

<p th:text="#{TEST}"></p>

我有下一个密码

    Context context = new Context();
    context.setLocale(Locale.GERMAN);
    String emailBody = templateEngine.process( "WELCOME", context);

我有下一个豆子

 @Bean
public TemplateEngine mailTemplateEngine() {
    TemplateEngine templateEngine = new TemplateEngine();
    templateEngine.addTemplateResolver(mailTemplateResolver());
    templateEngine.addDialect(new LayoutDialect());
    templateEngine.setMessageResolver(messageResolver());
    return templateEngine;
}

@Bean
public ITemplateResolver mailTemplateResolver() {
    ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
    templateResolver.setPrefix("/templates/email/common/");
    templateResolver.setSuffix(".html");
    templateResolver.setTemplateMode(TemplateMode.HTML);
    templateResolver.setCharacterEncoding(UTF_8.name());
    templateResolver.setCheckExistence(true);
    templateResolver.setCacheable(false);
    return templateResolver;
}

@Bean
public IMessageResolver messageResolver() {
    return new StandardMessageResolver();
}

我正在使用下一个依赖项

       <dependency>
        <groupId>nz.net.ultraq.thymeleaf</groupId>
        <artifactId>thymeleaf-layout-dialect</artifactId>
        <version>2.4.1</version>
    </dependency>
    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf</artifactId>
        <version>3.0.12.RELEASE</version>
    </dependency>

我在“资源”文件夹中有我需要的每种语言的资源包消息。如果你用ctrl左键从我的html中检查#{TEST},你可以看到它看到属性文件,所以IDEA可以解析它。

当我运行我的应用程序并尝试发送电子邮件时,我得到了下一个结果

??TEST_de??

对于其他语言,我得到了类似的结果。

如何解决这个问题?我需要TemplateEngine能够根据区域设置获得适当的属性值。

共有1个答案

冷涵忍
2023-03-14

使用Spring和Thymeleaf时,您可能会更好地使用提供Spring集成的Thymeleaf类。像SpringTemplateEngine,它将自动连接到SpringMessageSource

现在,在使用Spring时,您可能还需要使用SpringResourceTemplateResolver

java prettyprint-override">@Bean 
public ReloadableResourceBundleMessageSource messageSource() {
  ReloadableResourceBundleMessageSource source = new ReloadableResourceBundleMessageSource();
  source.setBasename("classpath:/messages");
  return source;
}

@Bean
public SpringTemplateEngine mailTemplateEngine() {
  SpringTemplateEngine templateEngine = new SpringTemplateEngine();
  templateEngine.addTemplateResolver(mailTemplateResolver());
  templateEngine.addDialect(new LayoutDialect());
  return templateEngine;
}

@Bean
public SpringResourceTemplateResolver mailTemplateResolver() {
  SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
  templateResolver.setPrefix("classpath:/templates/email/common/");
  templateResolver.setSuffix(".html");
  templateResolver.setCharacterEncoding(UTF_8.name());
  templateResolver.setCheckExistence(true);
  templateResolver.setCacheable(false);
  return templateResolver;
}

专业提示:当使用Java配置时,尽量在返回类型中具体化,这使Spring更容易确定回调,如ApplicationWareMessageSourceAware等。

 类似资料:
  • 我遇到了一个问题,让我的spring boot应用程序加载我的简单网页。我已经复制了这里提供的示例,并在模板目录中实现了它们,我一直得到这个错误 TemplateInputException:解析模板[index]时出错,模板可能不存在,或者任何已配置的模板解析程序都无法访问模板 下面是文件目录 如有任何帮助,不胜感激,谢谢。

  • 下面是index.html 它们在不同的文件夹中,但pathing应该工作,除非我只是错过了一些真正愚蠢的东西。

  • 我的问题是我未能显示胸腺叶模板。我怀疑配置错误,但我似乎找不到它。提前感谢:) 波姆。xml: 模板在: Spring配置: 控制器: 我正在尝试访问:并获得404。 另一件事,有人能解释(或给文档一个链接)哪个servlet被用来“返回”模板html吗?是Spring调度员servlet吗? 好的,所以我忘记了,谢谢@Benjamin c.然而,添加它会产生:

  • 我想在HTML中显示一个请求的对象,我得到了一个错误,我不知道是什么原因导致了我的错误。谷歌帮不上忙,现在我试着问你。我认为错误不是来自我的表,因为我把它注释掉了,错误仍然是Occour。该错误也不是来自“http://localhost:8081/simulation”,因为我使用有效值重新接收了一个有效的JSON。谢谢你的帮助:)。 下面是我的代码: 我通过调用“http://localhos

  • 我不熟悉Spring5和SpringBoot。我试图用thymeleaf创建一个Spring5/spring启动应用程序。我想创建一个war,而不是使用带有spring boot的嵌入式Web服务器。 当我部署war时,我的应用程序启动,我可以访问src/main/resources/static/中的测试html页面,其中包含调用我的控制器的javascript。我可以在这些页面上执行到控制器和

  • 所以,我看到在Stackoverflow中都能回答这个问题,但对我没有任何帮助。(SpringMVC+Thymeleaf,错误消息是:模板可能不存在,或者任何已配置的模板解析程序都无法访问