1

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

这是我到目前为止所拥有的:

class UrlMappings {

    static mappings = {

        ...

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

因此,在每个控制器中,如果第二个 URL 参数匹配“编辑”,用户将被转发到两个操作之一,具体取决于请求的 HTTP 方法。

一切正常,直到代码到达我的editViewedit此代码的操作:

params.id

评估为edit,而不是1本示例请求中所预期的那样:/location/edit/1

这是Grails中的错误吗?

4

1 回答 1

1

我认为您不能像现在这样使用 URL 映射语法,您需要将其拆分为两个映射,例如:

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

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

我意识到这重复了动作块,但我认为除了为你的动作放入另一个变量并根据它决定要做什么之外,没有其他方法可以解决这个问题。

对不起,如果我误解了你 - 这本来是一个评论,但我还不允许发表任何评论!

于 2011-08-08T09:37:59.533 回答