2016-11-25 5 views
0

Я разрабатываю небольшой проект, который имеет пару таблиц. Одна из них - таблица Person, которая имеет id и имя как атрибуты. Я успешно получаю набор результатов из базы данных (используя MySql) и могу преобразовать их в json. Однако я не могу найти способ отображения json в виде таблицы html. Есть ли способ передать список людей в 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 

Это ДИСПЛЕЙ ys список объектов человека. Но мне нужно отобразить таблицу html.

ответ

2

Однако, я не могу найти способ отображения json в виде таблицы html. Есть ли способ передать список людей в html и просто отобразить его в таблице?

Не похоже, что вы хорошо изучили руководство по игре. Тем не менее, я бы не отправил JSON в шаблон. Вместо этого, я бы передать

List<Persons> 

(Java Object) в шаблон и использовать лестницу языка 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] 

И для применения контроллера, измените соответствующий параметр t to:

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. Он также предполагает, что у вас есть методы «получить». Если они являются публичными полями, вы можете использовать @ person.name и @ person.id. Измените эти переменные в соответствии с тем, что у вас есть в вашем классе Person.

Тогда вам не нужен index.coffee. Вам также не понадобится тег в вашем index.scala.html (если вам это не нужно по другим причинам).

На странице справки, упомянутой выше, вы также можете ознакомиться с разделом «Объявление повторно используемых блоков», чтобы создать восстановимый блок для отображения каждого объекта Person. Тем не менее, я сначала попробую простейшую версию, а затем попытаюсь это сделать.