2014-04-05 3 views
6

यूआरएलGrails 2.3.x:</p> <p>: URL पैरामीटर का मान प्राप्त

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

मैं (इस मामले में एक्सेल है) प्रारूप मूल्य प्राप्त करने के

नियंत्रक में चाहते हैं को देखते हुए `params.format

Grails docs reference

लेकिन params.format println मैं हमेशा शून्य, कोई विचार?

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' कहां है? इस नियंत्रक को '/ हैलो? Foo = bar' मैप किया गया है? क्या आप 'पैराम्स' .format' का जिक्र कर रहे थे? आप जिस वास्तविक यूआरएल को मारने की कोशिश कर रहे हैं वह क्या है? * एक समस्या अच्छी तरह से कहा गया है एक समस्या आधा हल * है - मुझे लगता है कि आप इससे सहमत होंगे। :) – dmahapatro

उत्तर

5

आप विन्यास से अधिक सम्मेलन की सबसे भाग्यशाली शिकार में से एक हैं। ;)

कुंजी format के साथ एक प्रविष्टि के रूप में के रूप में डिफ़ॉल्ट यूआरएल मानचित्रण जो प्रतिक्रिया के प्रकार उम्मीद है कि (आम तौर पर, चाहे xml/json) भी सामग्री बातचीत जिसका मतलब है के लिए इस्तेमाल किया जा किया जाएगा का प्रतिनिधित्व करता है के द्वारा संदर्भित params में जोड़ा जाता है, एक उदाहरण है, अगर आप का उपयोग करें:

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 है सकते हैं।

या

यूआरएल मानचित्रण को संशोधित करने और वैकल्पिक (.$format)? को दूर करता है, तो जरूरी नहीं:

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

आपके सभी धैर्य और बहुत अच्छे समझाए गए उत्तरों के लिए धन्यवाद। यह मेरे लिए अजीब लगता है, क्योंकि मैं एक Grails प्लगइन [Grails निर्यात प्लगइन] का उपयोग कर रहा था (http://grails.org/plugin/export) – Alberici

+0

हाँ मुझे लगता है कि प्लगइन में 'params.format' का उपयोग किया जाता है। प्लगइन बहुत पुराना है। अभी, यदि संभव हो तो मानचित्रण को संशोधित करें, मैं Grails के नए संस्करणों को अनुकूलित करने के लिए प्लगइन के लिए पीआर पर काम करूंगा। – dmahapatro

+1

एक और स्टैक ओवरफ्लो पृष्ठ जो किसी के लिए ब्याज का हो सकता है: 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] 

    } 
संबंधित मुद्दे