我正在开发一个有几个表的小项目。其中一个是Person表,它有id和name作为属性。我成功从数据库(使用MySql)获取结果集,并可以将它们转换为json。但是,我无法找到一种方法将json显示为html表。有没有办法将人员列表传递给html并将其显示在表格中?
Application.java
public class Application extends Controller {
@Inject
FormFactory formFactory;
public Result index() {
return ok(index.render());
}
@Transactional(readOnly = true)
public Result getPersons() {
List<Person> persons = (List<Person>) JPA.em().createQuery("select p from Person p").getResultList();
return ok(toJson(persons));
}
index.scala.html
@()
@main("Welcome to Play") {
<script type='text/javascript' src='@routes.Assets.at("javascripts/index.js")'></script>
<ul id="persons"></ul>
//logic to display table
}
index.coffee
$ ->
$.get "/persons", (persons) ->
$.each persons, (index, person) ->
$("#persons").append $("<li>").text person.id + person.name
显示人物对象列表。但我需要显示一个html表
答案 0 :(得分:2)
但是,我无法找到将json显示为html表的方法。有没有办法将人员列表传递给html并将其显示在表格中?
您似乎没有很好地阅读过Play手册。但是,我不会将JSON发送到模板。相反,我会通过
List<Persons>
(Java Object)到scala模板并使用Scala Templating语言显示表。我想您会从阅读模板帮助页here.
中受益特别注意迭代部分进行for循环。 我就是这样做的(未经测试):
index.scala.html
@(persons: List[Person])
@main("Welcome to Play") {
<script type='text/javascript' src='@routes.Assets.at("javascripts/index.js")'></script>
<ul id="persons"></ul>
//logic to display table
<table>
@for(person <- persons){
<tr>
<td>@person.getName()</td>
<td>@person.getId()</td>
</tr>
}
</table>
}
请注意,在Scala模板中,不使用以下语法:
List<Person>
(就像在Java中一样),你使用
List[Person]
对于Application Controller,将相关部分更改为:
public Result getPersons() {
List<Person> persons = (List<Person>) JPA.em().createQuery("select p from Person p").getResultList();
return ok(index.render(persons);
这假设您在Person类中有两个字段:name和id。它还假设你有&#34;得到&#34;他们的方法。如果它们是公共字段,则可以使用@ person.name和@ person.id。更改这些变量以匹配Person类中的变量。
那么你不应该使用index.coffee。你也不需要index.scala.html中的标签(除非你出于其他原因需要它)。
在上面提到的帮助页面上,您还可以查看&#34;声明可重复使用的块&#34;部分创建一个可恢复的块来显示每个Person对象。但是,我会先使用最简单的版本然后尝试这个。