#java #crud #playframework
#java #crud #playframework
Вопрос:
Здравствуйте, я пытаюсь настроить 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
Обратите внимание на использование имени объекта и идентификатора объекта в [] для моего 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:
Это не работает, потому что 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}
Комментарии:
1. Спасибо, RoToRa! Тег crud.custom — это именно то, что мне было нужно