在 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()
我有一个模板:
<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()