控制器中grails中的重定向问题。
控制器中的:
def function1 = {
... do stuff ...
... go to service ...
redirect(action: "searchName", name: test)
//redirect(action: "searchName", params: [ name: test ])
}
在searchName中,没有参数。它是一个空列表。 尝试第二种方式调用重定向,我得到grails exceions(MissingMethodException),对于一个确实存在的方法。
没有什么特别的,我可以看到,正在发生。
任何帮助?
修改
MissingMethodException不在searchName函数上,而是在服务中的方法上。这种方法就在那里。
如果我使用第一个重定向方法,那么服务方法可以正常工作,但重定向到searchName包含空参数。 如果我切换重定向方法,那么服务方法不再有效 (除了,所以它永远不会到达重定向)。完全重新编译/清理代码。
另外,searchName是一个闭包。再一次,没什么特别的。 抓住name参数,然后使用它。
class MyWierdController {
def function1 = {
... do stuff ...
... go to service ...
String test="blah"
redirect(action: "searchName", name: test)
}
def searchName = {
if (params.name) {
log.info "its there"
} else {
log.info "its not there"
}
}
}
答案 0 :(得分:0)
redirect()
是一个真正的HTTP重定向。您将遇到问题,因为所有参数都将序列化为反序列化,并且您可能正在丢失类型信息(例如Date,重定向后将为字符串。
第一个版本将忽略name参数,因为所有参数都必须在params
。
尝试
redirect(action: "searchName", params: ["name": "test"]);
// or
redirect(action: "searchName", params: params);
由于你没有引用参数,groovy希望它们是一个变量并尝试解决它们。由于两者都未定义,因此它变为params: [null: null]
。
但是我想,您正在搜索render(view: "searchName", params: ["name": "test"])
,它不会进行HTTP重定向。