我有一些控制器操作需要几种不同的HTTP方法,例如GET和POST。我没有在控制器操作代码中处理这个问题,而是(错误地(决定,如果我把这个代码放在UrlMappings.groovy类中,它会更快、更不复杂。
以下是我目前所拥有的:
class UrlMappings {
static mappings = {
...
"/$controller/(create|edit)/$id" {
action = [
GET: "editView",
POST: "edit"
]
}
}
}
因此,在每个控制器中,如果第二个URL参数与"edit"匹配,则根据请求的HTTP方法,用户将被转发到两个操作之一。
一切都很好,直到代码到达我的editView
或edit
操作,其中代码:
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"
]
}
我意识到这重复了行动块,但我认为除了为你的行动添加另一个变量并据此决定该做什么之外,没有其他方法可以解决这个问题。
如果我误解了你,很抱歉——这本来是一条评论,但我还不允许发布任何评论!