#grails #grails-orm #gsp
#grails #grails-orm #gsp
Вопрос:
У меня есть класс домена, который я хочу во время выполнения выполнить вызов базы данных для заполнения списка объектов в качестве свойства. У меня есть дерево со свойством ‘headMember’, и это свойство является объектом, который выполняет следующую функцию:
def marriages = {
def marriages = Marriage.findAll("from Marriage as m where m.mainMember.name=:name", [name:name])
return [marriages:marriages]
}
в моем GSP я использую ${tree?.headMember?.marriages}
для доступа к свойству ‘headMember’ модели, которое передается в представление ‘tree’ из следующей функции в соответствующем контроллере:
def show = {
def tree = Tree.get(params.id)
render(view:'show', model:[tree:tree])
}
когда я просматриваю это в своем браузере, я получаю:
Member$_closure1@3708ab98
где я ожидал бы увидеть список.
Есть идеи, что я делаю не так?
Приветствую.
Ответ №1:
Когда вы вызываете браки, вы вызываете замыкание, и это замыкание возвращается. Я думаю, что вам следует переработать это, чтобы это был метод, что-то вроде этого:
static transients = ['marriages'] // tell hibernate that marriages is not a persistent property
List<Marriages> getMarriages(){
return Marriage.findAll("from Marriage as m where m.mainMember.name=:name", [name:name])
}
Таким образом, при вызове ${tree?.headMember?.marriages}
в вашем GSP вызывается getMarriages()
метод и должен быть возвращен список совпадений.
Комментарии:
1. Не могли бы вы показать, как выглядят ваши классы домена Tree и headMember?
2. На самом деле я допустил ошибку при реализации вашего решения. Все работает отлично! Большое вам спасибо 🙂