【问题标题】:grails redirect errorgrails重定向错误
【发布时间】:2011-10-25 01:09:12
【问题描述】:

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

}
}

【问题讨论】:

  • grails 1.3.7 - 抱歉。应该在前面提到的
  • 你在调用function1 action后有什么http响应?

标签: grails


【解决方案1】:

redirect() 是真正的 HTTP 重定向。您会遇到问题,因为您的所有参数都将被序列化和反序列化,并且您可能会丢失类型信息(例如,日期,它将在重定向后成为字符串。

第一个版本将忽略名称参数,因为所有参数都必须在params 内。

试试

redirect(action: "searchName", params: ["name": "test"]);
// or
redirect(action: "searchName", params: params);

由于您没有引用参数,groovy 期望它们是一个变量并尝试解析它们。由于两者都未定义,因此它正在变为params: [null: null]

但是我猜,您正在搜索 render(view: "searchName", params: ["name": "test"]),它不会执行 HTTP 重定向。

【讨论】:

  • 这是因为我没有引用参数名称。我要去开枪打死自己了
猜你喜欢
  • 2012-09-08
  • 2014-09-03
  • 2011-12-20
  • 1970-01-01
  • 2015-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
相关资源
最近更新 更多