grails重定向错误

时间:2011-10-24 14:19:15

标签: grails

控制器中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"
  }

}
}

1 个答案:

答案 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重定向。