java - Play 2 框架 : scala iterate through fields of java objects in view

标签 java html scala playframework playframework-2.0

对了,我正在将一个 Java 对象传递给 View :

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

@(item: Item)

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

第二个问题是什么 HTML 标签最相关(而不是 lih4h3)来表示一个对象?

最佳答案

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

对象 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>

请记住,模板可能不是执行此操作的正确位置,尤其是当您可能想要过滤字段或其他内容时。您应该将代码移至 Controller ,或者移至模型更好。由于您知道该对象是一个 Item,因此您可以在 Item 中创建一个 getFields() 方法,您可以在其中实现更复杂的逻辑并返回一个列表字段或字段名称。


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

关于java - Play 2 框架 : scala iterate through fields of java objects in view,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19051966/

相关文章:

java - 如何从线程返回值

html - 如何在 CSS 中将 <hr/> 的宽度设置为小于宽度 :auto? 的 X 个像素

Scala Swing 日期选择器

java - hibernate 中有没有一种方法可以在一个字符串中操作多个查询

java - tomcat ssl重定向循环

javascript - 使用 Javascript 计算 JSON 嵌套数组中值的重复次数

javascript - 如何通过 jQuery 引用扩展的 Highslide 对象

scala - 构造函数中常量的用法

Scala 用于理解和循环

java - java中使用冒泡排序对字符串进行排序