2017-08-10 138 views
0

我使用彈簧靴和百里香。我有很多實體,我需要創建crud ui。所有的用戶界面都會類似是否可以使用反射來減少用戶界面的生成?反射和百里香

我想上的字段循環,並在thymeleaf模板獲得價值

+0

你能描述一下你想完成什麼嗎? (也許是一個代碼示例?) – bphilipnyc

+0

就像我說的,我有大約60個實體。而不是寫每一個片段,我想寫一個和實體字段上的循環 –

+0

不是一個模板就足夠了嗎?循環遍歷服務器端的每個字段並將它們添加到模型中。或者你是否試圖動態生成HTML?如果是這樣,爲什麼? – bphilipnyc

回答

2

在這些日子裏,我一直對一個問題非常相似,你的。

我發現Thymeleaf有這個東西叫做preprocessing它可以讓你有嵌套的表達,所以像這樣的工作:

<p th:text="${__${'myObj.myField'}__}"></p> 

在這種情況下,表達__${'myObj.myField'}__首先計算:這個預處理後,將由<p>標籤評估的表達式將變爲:

<p th:text="${myObj.myField}"></p> 

這是所期望的結果。請注意,在預處理的表達式中,我們將字段作爲字符串傳遞:因此,應該完全可以創建一個其中包含th:each的片段,它接受一個字符串列表,其中每個字符串都是一個字段。該列表可以通過Java直接在模型中注入,或者可以在Thymeleaf的標記中注入statically declared。這種片段的例子可以是:

<div th:fragment = "show-details"> 
    <tr th:each = "field : ${fieldsToPrint}"> 
     <td th:text = "${__${myObj + '.' + field}__}"></td> 
    </tr> 
</div> 

哪位能,例如,被像這樣使用:

<div th:replace = "myfragments :: show-details(fieldsToPrint = ${ {'name', 'surname'} }, myObj = ${objFromModel})"></div> 

字段的列表可以是手動或通過Java反射產生。

該過程仍然涉及一些工作,但方式不如手工創建所有視圖,特別是如果您可以顯示具有相同show-details片段的所有實體。我還沒有解決它,但應該可以使用類似的模式來編輯這些實體。

+0

+1對於不熟悉Thymeleaf的人來說,這是一個夢幻般的答案。代碼示例特別值得讚賞。 –