Grails中的URL映射存在问题:参数不正确



我有一些控制器操作需要几种不同的HTTP方法,例如GET和POST。我没有在控制器操作代码中处理这个问题,而是(错误地(决定,如果我把这个代码放在UrlMappings.groovy类中,它会更快、更不复杂。

以下是我目前所拥有的:

class UrlMappings {
    static mappings = {
        ...
        "/$controller/(create|edit)/$id" {
            action = [
              GET: "editView",
              POST: "edit"
            ]
        }
    }
}

因此,在每个控制器中,如果第二个URL参数与"edit"匹配,则根据请求的HTTP方法,用户将被转发到两个操作之一。

一切都很好,直到代码到达我的editViewedit操作,其中代码:

params.id

计算为edit,而不是本示例请求中预期的1/location/edit/1

这是Grails中的一个bug吗?

我认为你不能像现在这样使用URL映射语法,你需要把它分成两个映射,比如:

    "/$controller/edit/$id" {
        action = [
            GET: "editView",
            POST: "edit"
        ]
    }

    "/$controller/create/$id" {
        action = [
          GET: "editView",
          POST: "edit"
        ]
    }

我意识到这重复了行动块,但我认为除了为你的行动添加另一个变量并据此决定该做什么之外,没有其他方法可以解决这个问题。

如果我误解了你,很抱歉——这本来是一条评论,但我还不允许发布任何评论!

最新更新