2014-04-05 71 views
6

给出的URLGrails的2.3.x版本:得到的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) ] 
    } 
} 
+1

你可以添加你的控制器问题? – dmahapatro

+0

'foo'在哪里? '/ hello?foo = bar'如何映射到此控制器?你是指'params?.format'?什么是您尝试击中的实际网址? *一个好的问题是一个问题解决了一半* - 我想你会同意这一点。 :) – dmahapatro

回答

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以外的其他名称,那么如果请求参数为blah=excel,它应该在控制器中可用,如param.blah

OR

修改URL映射及移除选购(.$format)?如果不需要的话:

"/$controller/$action?/$id?(.$format)?"{ 
    constraints { 
     // apply constraints here 
    } 
} 
+0

谢谢你的耐心和非常好的解释答案。这对我来说似乎很奇怪,因为我使用的是Grails插件[Grails Export plugin](http://grails.org/plugin/export) – Alberici

+0

是的,我发现插件中使用了'params.format'。插件太旧了。现在,如果可能的话修改映射,我会在插件的PR上工作以适应更新版本的Grails。 – dmahapatro

+1

另一个可能是任何人感兴趣的StackOverflow页面:http://stackoverflow.com/questions/19961339/grails-export-plugin-dont-download-any-file – Alberici

0

因为format是Grails的平台令牌,在下面找到另一种方法通过增加mapExtensionFormat varaible来解决这个问题:

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] 

    } 
相关问题