2017-08-10 16 views
0

私は春のブーツとタイメレフを使用します。私は多くのエンティティを持っており、私はcrud UIを作成する必要があります。すべてのuiは似ています。生成するuiを減らすためにリフレクションを使用することは可能ですか?反射とタイフレフ

私は、フィールド上のループにように、私はあなたに非常によく似た問題に取り組んできている昨今ではthymeleafテンプレート

+0

達成しようとしていることを説明できますか? (おそらくコード例?) – bphilipnyc

+0

私は言ったように、私は約60のエンティティを持っています。それらのすべてのための断片を書くのではなく、私はエンティティのフィールドに1つのループを書くことを望みます –

+0

1つのテンプレートで十分でしょうか?サーバー側の各フィールドをループしてモデルに追加します。または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

Thymeleafに慣れていない人のための+1素晴らしい答え。コードサンプルは特に評価されます。 –