播放框架:将数据显示为html表格

时间:2016-11-25 03:33:38

标签: javascript html mysql json playframework

我正在开发一个有几个表的小项目。其中一个是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表

1 个答案:

答案 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对象。但是,我会先使用最简单的版本然后尝试这个。