我的Grails代码有一个搜索功能,在执行findAllBy查询后重定向到另一个控制器操作:
def results = Foo.findAllByBar(baz)
redirect(action: "result", params: [results: results])
Run Code Online (Sandbox Code Playgroud)
findAllByBar按预期返回带有模型的ArrayList,但在重定向之后,接收操作获得一个String数组.更糟糕的是,当只有一个结果时它甚至没有得到一个数组,它只是得到一个字符串.
鉴于我必须在接收视图中迭代结果,在字符串上执行它将仔细地单独打印每个字母.我们都同意这可能不是理想的行为.
重定向会导致带有查询字符串中参数的新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)
| 归档时间: |
|
| 查看次数: |
4335 次 |
| 最近记录: |