3

右、Java オブジェクトをビューに渡しています。

次のようにすべてのフィールドをリストする代わりに、オブジェクトのすべてのフィールドをコレクション (Java のリフレクションのようなもの) として取得し、それらをループで出力することは可能でしょうか?

@(item: Item)

<li data-item-id="@item.id">
    <h4>@item.name</h4>
    <h3>@item.field1</h3>
    <h3>@item.field2</h3>
    ...
</li>

2 番目の質問は、オブジェクトを表すのに ( 、 、 の代わりに)li最もh4関連性の高い HTML タグはどれかということです。h3

4

1 に答える 1

6

これに対する解決策は、「何かのような」反射を使用するのではなく、実際に反射を使用することです。このためのライブラリまたはフレームワークは、とにかくリフレクションに基づいている可能性が最も高いでしょう。

オブジェクトクラスは、宣言されたフィールド、または宣言されたフィールドと継承されたフィールドの両方取得するために必要なすべてのメソッドを提供します。フィールドクラスには、名前、タイプ、値など、実際のフィールドに関するすべての情報が含まれます。

ページに表示するクラス:

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.

于 2013-09-29T20:52:24.750 に答える