我有一些控制器操作需要几种不同的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中的错误吗?
答案 0 :(得分:1)
我认为您不能按照您的方式使用URL映射语法,您需要将其拆分为两个映射,例如:
"/$controller/edit/$id" {
action = [
GET: "editView",
POST: "edit"
]
}
和
"/$controller/create/$id" {
action = [
GET: "editView",
POST: "edit"
]
}
我意识到这会复制动作块,但我认为除了将另一个变量放入你的动作并根据它决定做什么之外,还有其他办法。
很抱歉,如果我误解了你 - 这本来是评论,但我不允许发布任何内容!