给定URL
http://localhost:9000/Estrategia/book/index?format=excel&extension=xls
我想获取格式值(在这种情况下是excel)
在控制器中:
`println params.format
但params.format
总是空的,有什么想法吗?
Grails 2.3.5
import static org.springframework.http.HttpStatus.*
import grails.transaction.Transactional
@Transactional(readOnly = true)
class BookController {
static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"]
def exportService // Export service provided by Export plugin
def grailsApplication //inject GrailsApplication
def index(Integer max) {
params.max = Math.min(max ?: 10, 100)
if(!params.max)
params.max = 10
println params?.format
[ bookInstanceList: Book.list( params ) ]
}
}
答案 0 :(得分:5)
你是约会对配置最幸运的受害者之一。 ;)
带有键format
的条目被添加到params
,如默认的url映射所示,它表示预期的响应类型(通常,是否xml / json)也将用于内容例如,如果您使用:
http://localhost:9000/Estrategia/book/index.xml
//params -- [action:index, format:xml, controller:book]
http://localhost:9000/Estrategia/book/index.json
//params -- [action:index, format:json, controller:book]
http://localhost:9000/Estrategia/book/index.json?format=excel&extension=xls
//params -- [action:index, format:json, extension:xls, controller:book]
http://localhost:9000/Estrategia/book/index?format=excel&extension=xls
//params -- [action:index, format:null, extension:xls, controller:book]
format
会被您要求的内容类型填充。这也意味着,名称为format
的请求参数将被覆盖并将丢失。
如果请求参数有format
,您可以将请求参数重命名为param.blah
以外的其他内容,然后它应该在blah=excel
之类的控制器中可用。
OR
修改网址映射,如果不需要,删除可选的(.$format)?
:
"/$controller/$action?/$id?(.$format)?"{
constraints {
// apply constraints here
}
}
答案 1 :(得分:0)
由于format
是Grails平台的令牌,因此请在下面找到另一种通过添加mapExtensionFormat
变量来解决此问题的方法:
static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"]
static mapExtensionFormat=['pdf':'pdf','xls':'excel','csv':'csv','rtf':'rtf']
def exportService // Export service provided by Export plugin
def grailsApplication //inject GrailsApplication
然后:
def index(Integer max) {
// ...
String format=mapExtensionFormat[params?.extension]
}