【问题标题】:Play 2 framework: scala iterate through fields of java objects in viewPlay 2框架:scala遍历视图中java对象的字段
【发布时间】:2013-10-03 19:43:54
【问题描述】:

是的,我正在将一个 Java 对象传递给视图:

我不知道如下列出所有字段,我想知道是否可以将对象的所有字段作为集合(类似于Java中的反射)然后循环打印它们?

@(item: Item)

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

第二个问题是哪些 HTML 标记最相关(而不是 lih4h3)来表示一个对象?

【问题讨论】:

标签: java html scala playframework playframework-2.0


【解决方案1】:

解决方案不是使用“类似”反射,而是实际使用反射。无论如何,任何用于此的库或框架都很可能基于反射。

对象class 提供了获取declared 或同时获取declared and inherited fields 所需的所有方法。 field 类包含有关实际字段的所有信息,例如其名称、类型或值。

示例

要在页面上显示的一些类:

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,因此您可以在 Item 中创建一个 getFields() 方法,您可以在其中实现更复杂的逻辑并返回字段或字段名称的列表。


语义 html 标记的选择实际上取决于字段的内容。一般来说,如果只打印字段名称,字段列表听起来很合理。如果您打印名称和值,您可以使用定义列表dltable

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-17
    • 2015-04-15
    • 2023-02-13
    • 2014-08-12
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多