从资源/模板_and_字符串

时间:2019-10-29 14:25:04

标签: spring spring-boot templates thymeleaf

在我的应用程序中,我需要使用“硬连线” html模板,将它们添加到resources/templates和“动态”文本模板中,这些模板将在运行时存储在String中。

我的代码与此类似:

@Autowired
SpringTemplateEngine templateEngine;

templateEngine.addTemplateResolver(new DynamicTemplateResolver());

Context context = new Context();
context.setVariable("foo1", ... );

templateEngine.process("eitherStaticOrDynamic", context, output);

问题出在实现DynamicTemplateResolver的{​​{1}}之内。我尝试使用在Process string templates with thymeleaf 3给出的示例,但是它们似乎不再适用于当前版本的Spring。

如何从ITemplateResolver s中解析模板?我使用Spring Boot 2.2

1 个答案:

答案 0 :(得分:0)

我想我找到了解决方案。我的错误是基于误解。 Thymeleaf为此Javadoc提供了StringTemplateResolver

  

...此模板解析器将考虑正在解析的模板   作为模板本身,就是它的内容。没有外部文件或   因此将访问资源。 ...

在此评论中(至少对我来说是隐藏的)是,给定的字符串不是搜索模板 name 而是将其视为 template 。这意味着,如果您提供foo = [(${foo})],则该模板不会被视为需要按名称查找的模板,而是被视为(在这种情况下:文本)模板!

这并将我的代码更改为此为我解决了这个问题:

StringTemplateResolver tr = new StringTemplateResolver();
tr.setTemplateMode(TemplateMode.TEXT);

没有此设置,我的模板无法解析,因为文本模式模板遵循与html模板不同的语法。