2014-04-05 6 views
6

die URL GegebenGrails 2.3.x: Holen Sie den Wert der URL-Parameter

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

Ich möchte das Format Wert erhalten (in diesem Fall übertreffen ist)

In der Steuerung:

`println params.format

Grails docs reference

Aber params.format i S immer Null, irgendeine Idee?

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

Können Sie Ihren Controller zur Frage hinzufügen? – dmahapatro

+0

Wo ist 'foo'? Wie ist '/ hallo? Foo = bar' diesem Controller zugeordnet? Haben Sie sich auf "params? .format" bezogen? Was ist die tatsächliche URL, die Sie versuchen zu treffen? * Ein gut angegebenes Problem ist ein halb gelöstes Problem * - ich denke, du würdest dem zustimmen. :) – dmahapatro

Antwort

5

Sie sind einer der glücklichsten Opfer Konvention über Konfiguration. ;)

Ein Eintrag mit Schlüssel format wird zu params hinzugefügt, da standardmäßig url mapping angegeben wird, das den Typ der erwarteten Antwort darstellt (im Allgemeinen, ob xml/json) auch für die Inhaltsverhandlung verwendet wird wenn Sie ein Beispiel verwenden:

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 wird von der Art des Inhalts bevölkerten Sie fordern. Dies bedeutet auch, dass ein Anforderungsparameter mit dem Namen format überschrieben wird und verloren geht.

Sie können den Anforderungsparameter in etwas anderes als format umbenennen, dann sollte es im Controller wie param.blah verfügbar sein, wenn der Anforderungsparameter blah=excel lautet.

ODER

URL-Mapping ändern und die optionalen (.$format)? entfernen, wenn nicht erforderlich:

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

Vielen Dank für Ihre Geduld und sehr gut erklärte Antworten. Das scheint mir komisch, weil ich ein Grails Plugin [Grails Export plugin] verwendet habe (http://grails.org/plugin/export) – Alberici

+0

Ja ich sehe, dass 'params.format' im Plugin verwendet wird. Plugin ist zu alt. Im Moment, wenn möglich, ändere ich das Mapping, ich würde an einem PR arbeiten, damit das Plugin auf neuere Versionen von Grails passt. – dmahapatro

+1

Eine weitere StackOverflow-Seite, die für jeden von Interesse sein könnte: http://stackoverflow.com/questions/19961339/grails-export-plugin-dont-download-any-file – Alberici

0

seit format ist Token von der Grails-Plattform unter einer anderen Methode zu finden, dieses Problem zu beheben mapExtensionFormat varaible über das Hinzufügen:

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 

Dann:

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

    } 
Verwandte Themen