Проблема с рендерингом Grails GSP

#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. На самом деле я допустил ошибку при реализации вашего решения. Все работает отлично! Большое вам спасибо 🙂