Типы параметров Grails Redirect - PullRequest
3 голосов
/ 27 августа 2011

Мой код Grails имеет функцию поиска, которая перенаправляет на другое действие контроллера после выполнения запроса findAllBy:

def results = Foo.findAllByBar(baz)
redirect(action: "result", params: [results: results])

findAllByBar возвращает ArrayList с моделями, как и ожидалось, но после перенаправления принимающее действие получает массив String. Хуже того, когда есть только один результат, он даже не получает массив, он просто получает строку.

Учитывая, что я должен перебирать результаты в представлении получения, выполнение этого на строке будет тщательно печатать каждую букву индивидуально. Мы все можем согласиться с тем, что это, вероятно, не идеальное поведение.

Ответы [ 2 ]

7 голосов
/ 27 августа 2011

Перенаправление приводит к новому запросу GET с параметрами в строке запроса, например, / controller / result? Foo = bar & baz = 123 - вы не можете помещать туда объекты, так как это просто строка.

Выможет поместить идентификаторы объектов в параметры и загрузить их в действии result:

def action1 = {
   def results = Foo.findAllByBar(baz)
   redirect(action: "result", params: [resultIds: results.id.join(',')])
}

def result = {
   def resultIds = params.resultIds.split(',')*.toLong()
   def results = Foo.getAll(resultIds)
}

или поместить их в область действия Flash:

def action1 = {
   flash.results = Foo.findAllByBar(baz)
   redirect(action: "result")
}

def result = {
   def results = flash.results
}
2 голосов
/ 13 сентября 2011

Звучит так, как будто вы хотите использовать метод цепочки вместо метода перенаправления.Цепочка позволяет передавать модель в качестве параметра, аналогичного визуализации.Примером может быть:

chain(action:'result',model:[results:results])

Вот ссылка для получения дополнительной информации: http://www.grails.org/doc/latest/ref/Controllers/chain.html

...