Grails重定向打破params类型

3 grails grails-controller

我的Grails代码有一个搜索功能,在执行findAllBy查询后重定向到另一个控制器操作:

def results = Foo.findAllByBar(baz)
redirect(action: "result", params: [results: results])
Run Code Online (Sandbox Code Playgroud)

findAllByBar按预期返回带有模型的ArrayList,但在重定向之后,接收操作获得一个String数组.更糟糕的是,当只有一个结果时它甚至没有得到一个数组,它只是得到一个字符串.

鉴于我必须在接收视图中迭代结果,在字符串上执行它将仔细地单独打印每个字母.我们都同意这可能不是理想的行为.

Bur*_*ith 8

重定向会导致带有查询字符串中参数的新GET请求,例如/ controller/result?foo = bar&baz = 123 - 您不能将对象放在那里,因为它只是一个字符串.

您可以将对象的id放在params中并在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)
}
Run Code Online (Sandbox Code Playgroud)

或将它们放在Flash范围内:

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

def result = {
   def results = flash.results
}
Run Code Online (Sandbox Code Playgroud)

  • 使用[forward](http://grails.org/doc/latest/ref/Controllers/forward.html) (3认同)