簡體   English   中英

在 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);

在您的情況下,這將返回一個包含以下內容的字符串:

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

但是隨着??? 替換為[[${var1}]]解析為的任何值。


有關更多詳細信息,請參閱TemplateEngine JavaDoc


更新

后續相關問題:如果要直接訪問fragment的內容,不包括封閉的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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM