Grails 2.3.x:获取URL参数的值

时间:2014-04-05 15:14:24

标签: url grails parameters

给定URL

  http://localhost:9000/Estrategia/book/index?format=excel&extension=xls

我想获取格式值(在这种情况下是excel)

在控制器中:

`println params.format

Grails docs reference

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 ) ]
  }
}

2 个答案:

答案 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]

  }