在控制器和gsp中有两个可变的变量:
params
- 包含所有参数的映射(来自查询字符串的GET和来自表单的POST)request
- HttpServletRequest
对象如何才能获得POST仅params或GET(查询字符串)只有params?我需要两种类型的参数,但在不同的地图中。
我知道,HttpServletRequest
对象包含有关查询字符串的信息,但我正在寻找解决方案而不实现查询字符串的解析器。
答案 0 :(得分:1)
我通过使用org.codehaus.groovy.grails.web.util.WebUtils
解析查询字符串解决了这个问题,然后将这些数据放入HttpServletRequest
属性。
现在我可以使用request.getAttribute('paramsGet')
或request.getAttribute('paramsPost')
。
Grails过滤器非常有用,所以:
package com.selly.filters
import org.codehaus.groovy.grails.web.util.WebUtils
class ParamsFilters {
List globalParams = [
"controller",
"action",
"format"
]
def filters = {
all(controller:'*', action:'*') {
before = {
Map paramsRequest = params.findAll {
return !globalParams.contains(it.key)
}
Map paramsGet = WebUtils.fromQueryString(request.getQueryString() ?: "")
Map paramsPost = paramsRequest.minus(paramsGet)
request.setAttribute('paramsGet', paramsGet)
request.setAttribute('paramsPost', paramsPost)
//println request.getAttribute('paramsGet')
//println request.getAttribute('paramsPost')
}
after = { Map model ->
}
afterView = { Exception e ->
}
}
}
}
答案 1 :(得分:0)
即使使用Grails,你也在使用Servlet来混合POST和GET。我不记得有什么东西(除了重新分析查询字符串)可以帮助你。