2017-02-08 30 views
1

我正在嘗試在各種頁面中包含相同的html位。該模板是一個顯示數據庫數據的表格。我知道Thymeleaf有片段,但據我所知,我不能在自己的控制器中包含一個片段,而我的模板需要這個片段,因此它可以檢索必要的數據。Thymeleaf包含模板和自己的控制器

我已經看到this question,但是這個模板可以在同一頁面上多次調用,並且向模型添加許多屬性似乎不是正確的解決方案(更不用說屬性名稱需要是唯一的)。

有沒有什麼辦法可以將這個模板包含在Thymeleaf中,所以它有自己的控制器與它所包含的頁面分開。

回答

0

不,不可能單獨使用百里香。每頁一個控制器。

有簡單添加所有屬性的替代方法。您可以在模型上放置一個集合 - 一個List或一個Map - 並將您的分段索引放入該模型中以獲取其數據。 (你可以將參數傳遞給一個片段。)

那還是javascript解決方案。

1

我使用的方法,我稱之爲「基於服務的渲染」 :)

背後的想法是通過@someService利用在彈簧豆整合。

而不是填充Model您可以調用任何bean,其中參數來自模型,請求映射,模板或片段參數或來自任何可以獲取它們的地方。

小例子:

<div th:each="someVar : ${@someService.getData(someParameter)}" th:text="${someVar}">Template Text</div> 
+0

雖然這是可能的(可能是你正在尋找的解決方案),我覺得這樣做是一般一個壞主意。它違背了MVC的原則(通過忽略模型/控制器),並且會使代碼更難以維護和調試。 – Metroids

+0

@Metroids:我不同意。我發現通過這種方式可以更容易地維護,您可以構建「可重用組件」。我不是說商業服務,而是說組件服務。 'Component'是一個可擴展的註釋,所以你可以在我的情況下構建一個生活在servletcontext中的'UIService'。模型是結果集/實體列表,片段是視圖。如果你喜歡,我可以用一個例子編輯答案。 –

相關問題