在我的应用程序中,我需要使用“硬连线” 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
答案 0 :(得分:0)
我想我找到了解决方案。我的错误是基于误解。 Thymeleaf为此Javadoc提供了StringTemplateResolver
:
...此模板解析器将考虑正在解析的模板 作为模板本身,就是它的内容。没有外部文件或 因此将访问资源。 ...
在此评论中(至少对我来说是隐藏的)是,给定的字符串不是搜索模板 name 而是将其视为 template 。这意味着,如果您提供foo = [(${foo})]
,则该模板不会被视为需要按名称查找的模板,而是被视为(在这种情况下:文本)模板!
这并将我的代码更改为此为我解决了这个问题:
StringTemplateResolver tr = new StringTemplateResolver();
tr.setTemplateMode(TemplateMode.TEXT);
没有此设置,我的模板无法解析,因为文本模式模板遵循与html模板不同的语法。