これに対する解決策は、「何かのような」反射を使用するのではなく、実際に反射を使用することです。このためのライブラリまたはフレームワークは、とにかくリフレクションに基づいている可能性が最も高いでしょう。
オブジェクトクラスは、宣言されたフィールド、または宣言されたフィールドと継承されたフィールドの両方を取得するために必要なすべてのメソッドを提供します。フィールドクラスには、名前、タイプ、値など、実際のフィールドに関するすべての情報が含まれます。
例
ページに表示するクラス:
public class Item {
public String foo = "bar";
public int x = 23;
}
テンプレート:
@(item: Item)
<ul>
@for(field <- item.getClass().getDeclaredFields()) {
<li>@field.getName() = @field.get(item)</li>
}
</ul>
出力:
<ul>
<li>foo = bar</li>
<li>x = 23</li>
</ul>
特にフィールドなどをフィルタリングしたい場合は、テンプレートはこれを行うのに適切な場所ではない可能性があることに注意してください。コードをコントローラーに移動するか、モデルに移動する必要があります。オブジェクトが であることがわかっているので、より複雑なロジックを実装してフィールドまたはフィールド名のリストを返すメソッドをItem
作成できます。getFields()
Item
セマンティック HTML タグの選択は、実際にはフィールドの内容に依存します。一般的に言えば、フィールド名だけを出力する場合、フィールドのリストは合理的に聞こえます。名前と値を出力する場合は、定義リストdl
またはtable
.