簡體   English   中英

Thymeleaf復合組件

[英]Thymeleaf composite components

有什么方法可以使用Thymeleaf制作復合組件(例如在JSF中)? 我發現了如何將參數發送到可以使用表達式語言檢索的片段。 但是我還沒有弄清楚如何像在JSF中那樣將標記發送到片段。

例如,我有幾個頁面的左側菜單非常相似。 我希望能夠在所有頁面上使用一個片段,但是傳遞一些標記以顯示在菜單底部。 有些頁面必須在底部顯示文本,有些頁面必須顯示文本,例如,實際上比這要復雜得多。

<div class="menu" th:frament="menu">
    <a th:text="${menuItem1}"></a>
    <a th:text="${menuItem2}"></a>
    <a th:text="${menuItem3}"></a>
    <markup sent as parameter /> <!-- how do I do this? -->
</div>



<div th:substitueBy="template :: menu" th:with="menuItem1=item1, menuItem2:item2, menuItem3:item3">
    <markup to be sent as parameter /> <!-- this does not work -->
</div>

我還想創建具有可交換內容的復合組件。 這就是為什么我開發了百里香葉成分方言

使用這種方言,您可以編寫如下組件:

使用<tc:content/>標簽創建組件(百里香片段)

<div th:frament="menu">
    <a th:text="${menuItem1}"></a>
    <a th:text="${menuItem2}"></a>
    <a th:text="${menuItem3}"></a>
    <tc:content></tc:content>
</div>

使用組件

<tc:menu>
    <h1>Some Header</h1>
    <p>Lorem ipsum dolor sit amet</p>
</tc:menu>

結果將是

<div>
    <a>Menu Item 1 Text</a>
    <a>Menu Item 2 Text</a>
    <a>Menu Item 3 Text</a>
    <h1>Some Header</h1>
    <p>Lorem ipsum dolor sit amet</p>
</div>

該方言是新的,仍處於字母狀態。 歡迎反饋。

您可以執行以下操作:

但是您必須將所有菜單容器屬性寫入使用的每個頁面。

我不是很喜歡這種方式,但是我認為它應該可以:p

模板:

<div th:frament="menu">
    <a th:text="${menuItem1}"></a>
    <a th:text="${menuItem2}"></a>
    <a th:text="${menuItem3}"></a>
</div>

頁:

<div class="menu">
    <div th:include="template :: menu" 
         th:remove="tag" 
         th:with="menuItem1=item1, menuItem2:item2, menuItem3:item3" />
    <more markup/>
</div>

暫無
暫無

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

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