在 Java 中获取 Thymeleaf 模板片段

Get a Thymeleaf template fragment in Java

我有一个模板:

<div th:fragment="subject">
    [[${var1}]] -  blabla
</div>
<div th:fragment="body">
titi
</div>

在Java中:

我只想检索主题片段并将其放入变量中。

String subject =  templateEngine.process(template.getPath()+" :: subject", context);

但我得到了错误:

java.io.FileNotFoundException: ClassLoader resource "mail/templates/mail_depot.html :: subject" could not be resolved

我可以成功调用:

String subject =  templateEngine.process(template.getPath(), context);

但是当我添加“:: subject”以仅检索主题片段时出现错误。

TemplateEngine 有不同版本的 process() 方法。您需要的是:

public final String process​(String template, Set<String> templateSelectors, IContext context)

此方法采用一组字符串,其中每个字符串都可以是片段的名称。

例如:

Set<String> selectors = new HashSet<>();
selectors.add("subject");

String subject =  templateEngine.process(template.getPath(), selectors, context);

在您的情况下,这将 return 一个包含以下内容的字符串:

<div>
    ??? -  blabla
</div>

但是 ??? 替换为 [[${var1}]] 解析为的任何值。


有关详细信息,请参阅 TemplateEngine JavaDoc


更新

Follow-up 相关问题:如果要直接访问片段的内容,不包括封闭的 HTML 标签,可以使用以下内容:

<th:block th:fragment="subject">
    foo
</th:block>
<div th:fragment="body">
    bar
</div>

Thymeleaf <th:block> 标签自行删除。

如果片段中有嵌套标签,使用 <th:block> 时不会删除这些标签。

否则,使用 HTML 解析器,例如 Jsoup:

Jsoup.parse(yourHtmlString).text()