Настройка CRUD list.html в PlayFramework - PullRequest
3 голосов
/ 04 мая 2011

Здравствуйте. Я пытаюсь настроить представление list.html для раздела CRUD приложения воспроизведения.

Моя модель выглядит следующим образом

У меня есть объект, имеющий отношение кдругой объект, подобный так:

@Entity
public class MyObjectA extends Model {

    @Required
    public String myObjectAName;

    ...

    @Required
    @ManyToOne
    public MyObjectB myObjectB;
}

Теперь в list.html, который я перезаписываю, у меня есть этот

<div id="crudListTable">
    #{crud.table fields:['myObjectB', 'myObjectAName'] /}
</div>

Теперь выполнение этого кода будет отображать что-то вроде этого при вызове следующего URL http://myplayapp/admin/myObjectAs в браузере

myObjectB _ _ myObjectAName

MyObjectB [1] _ _ Эй, это имя для myObjectAName
MyObjectB [2] _ _ Эй, это другое имя для myObjectAName

Обратите внимание на использование объектаname и id объекта в [] для моего MyObjectB.

Итак, чтобы отобразить свойство myObjectBName MyObjectB в списке выше, я пытаюсь это сделать:

<div id="crudListTable">
    #{crud.table fields:['myObjectB.myObjectBName', 'myObjectAName'] /}
</div>

Но затем я получаю эту ошибку

Произошла ошибка выполнения в шаблоне {module: crud} /app/views/tags/crud/table.html.> Возникло исключение MissingPropertyException: такого свойства нет: myObjectB.myObjectBName> для класса: models.MyObjectA.

Конечно, MyObjectB имеет открытое свойство myObjectBName

Так что же я здесь не так делаю?

1 Ответ

7 голосов
/ 04 мая 2011

Это не работает, потому что параметр fields просто берет список имен полей класса для отображения (здесь MyObjectA), а "myObjectB.myObjectBName" не является именем поля в MyObjectA.

Есть два способа сделать это:

Простое решение - переопределить toString() метод MyObjectB.Это имеет тот недостаток, что одна и та же строка используется каждый раз, когда отображается MyObjectB, и это может быть не то, что вы хотите.

Пример:

public class MyObjectB extends Model {

  // ...

  @Override
  public String toString(() {
    return this.myObjectBName;
  }

}

Список, указанный в качестве решенияиспользовать тег crud.custom .

Пример:

#{crud.table fields:['myObjectB', 'myObjectAName']}
   #{crud.custom 'myObjectB'}
       ${object.myObjectB.myObjectBName}
   #{/crud.custom}
#{/crud.table}
...