2014-04-05 10 views
6

Dato l'URLGrails 2.3.x: ottenere il valore dei parametri URL

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

voglio ottenere il valore di formato (in questo caso è excel)

Nel controllore:

`println params.format

Grails docs reference

Ma params.format i è sempre nulla, qualche idea?

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

È possibile aggiungere il controller alla domanda? – dmahapatro

+0

Dov'è 'foo'? In che modo '/ hello? Foo = bar' è mappato su questo controller? ti riferivi a 'params? .format'? Qual è l'url reale che stai cercando di colpire? * Un problema ben dichiarato è un problema risolto a metà * - Penso che tu acconsentissi. :) – dmahapatro

risposta

5

Tu sei uno dei fortunati vittima di convenzione sulla configurazione. ;)

Un'entrata con chiave format è aggiunto params come riferisce mappatura URL predefinito che rappresenta il tipo di risposta che si prevede (generalmente, se XML/json) verrà essere utilizzato anche per la negoziazione dei contenuti che significa, come Ad esempio, se si utilizza:

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 ottiene popolata da tipo di contenuto che si sta chiedendo. Il che significa anche che un parametro di richiesta con nome format verrà sostituito e andrà perso.

è possibile rinominare il parametro di richiesta a qualcosa di diverso da format allora dovrebbe essere disponibile in controllo come param.blah se il parametro di richiesta ha blah=excel.

O

modificare la mappatura URL e rimuovere opzionale (.$format)? se non richiesto:

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

Grazie per la vostra pazienza e le ottime risposte spiegate. Questo mi sembra strano, perché stavo usando un Grails Plugin [Grails Export plugin] (http://grails.org/plugin/export) – Alberici

+0

Sì, vedo che 'params.format' è usato nel plugin. Il plug-in è troppo vecchio. In questo momento, se possibile modificare la mappatura, vorrei lavorare su un PR per il plugin per adattarsi alle versioni più recenti di Grails. – dmahapatro

+1

Un'altra pagina StackOverflow che potrebbe interessare a chiunque: http://stackoverflow.com/questions/19961339/grails-export-plugin-dont-download-any-file – Alberici

0

dal format è gettone dalla piattaforma Grails, per risolvere questo problema tramite l'aggiunta di mapExtensionFormat varaible trovano sotto altro metodo:

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 

Poi:

def index(Integer max) { 
     // ... 
     String format=mapExtensionFormat[params?.extension] 

    }