2008-10-13 12 views
27

के लिए सर्वोत्तम अभ्यास एक grails ऐप में इंडेक्स पेज के लिए मॉडल को पॉप्युलेट करने का सही तरीका क्या है? डिफ़ॉल्ट रूप से कोई इंडेक्स कंट्रोलर नहीं है, क्या इस सूची की सूची पाने के लिए और मॉडल में कुछ अन्य तंत्र है?grails इंडेक्स पेज

उत्तर

36

मैं दावा नहीं करूंगा कि यह सही तरीका है, लेकिन चीजों को शुरू करने का यह एक तरीका है। नियंत्रक को डिफ़ॉल्ट होने में बहुत कुछ नहीं लगता है। UrlMappings.groovy करने के लिए एक मैपिंग जोड़ें:

class QuoteController { 

    def index = { 
     ... 
    } 
} 

क्या आप लोड करना चाहते हैं पहले से ही एक अन्य कार्रवाई का हिस्सा है, तो बस अनुप्रेषित:

class UrlMappings { 
    static mappings = { 
     "/$controller/$action?/$id?"{ 
      constraints { 
       // apply constraints here 
      } 
     } 
     "500"(view:'/error') 
    "/" 
     { 
      controller = "quote" 
     } 
    } 
} 

तो अब डिफ़ॉल्ट नियंत्रक को एक सूचकांक कार्रवाई जोड़ने

def index = { 
    redirect(action: random) 
} 

या वास्तव में कुछ पुन: उपयोग, के लिए जा रहा एक सेवा में तर्क डाल पाने के लिए:

class QuoteController { 

    def quoteService 

    def index = { 
     redirect(action: random) 
    } 

    def random = { 
     def randomQuote = quoteService.getRandomQuote() 
     [ quote : randomQuote ] 
    } 
} 
+2

मुझे लगता है कि UrlMappings शायद पढ़ा जाना चाहिए था '"/"{नियंत्रक::" बोली "}'

नीचे मेरा पूरा UrlMappings.groovy है। यह तब तक मेरे लिए काम नहीं करता जब तक कि मैंने "=" को ":" में बदल दिया। –

+0

'स्थिर डिफ़ॉल्ट क्रिया =" यादृच्छिक "' - इंडेक्स एक्शन से रीडायरेक्ट करने के बजाय आप वांछित एक्शन नाम के साथ नियंत्रक को डिफ़ॉल्ट एक्शन स्थिर फ़ील्ड जोड़ सकते हैं। – topr

4

अच्छा उत्तर: यदि आपको इंडेक्स पेज के लिए मॉडल को पॉप्युलेट करने की आवश्यकता है, तो यह एक इंडेक्स नियंत्रक को सीधे index.gsp का उपयोग करने से बदलने का समय है।

बुरा जवाब: यदि आप एक फ़िल्टर बनाते हैं जिसका नियंत्रक '*' है, तो यह स्थिर पृष्ठों के लिए भी निष्पादित हो जाएगा।

19

मुझे काम करने के लिए उपरोक्त एड टी का उदाहरण नहीं मिला। शायद तब से Grails बदल गया है?

"/"(controller: 'home', action: 'index') 

मेरे HomeController इस तरह दिखता है:

कुछ प्रयोग करने के बाद और कुछ नेट पर तलाशी, मैं इस के साथ UrlMappings.groovy में समाप्त हो गया

class HomeController { 

    def index = { 
    def quotes = = latest(Quote.list(), 5) 
    ["quotes": quotes, "totalQuotes": Quote.count()] 
    } 

} 

और में, मैं एक index.gsp है फ़ाइल। इससे अनावश्यक विचारों में index.gsp फ़ाइल बन जाती है, इसलिए मैंने इसे हटा दिया।

0

सिर्फ

"/index.gsp"(uri:"/")

जोड़ने UrlMappings.groovy करने के लिए grails 1.3.6 में मेरे लिए ठीक काम किया। यह पहले से वर्णित एक नया नियंत्रक और मैपिंग जोड़ने के समान प्रभाव है।

class UrlMappings { 

    static mappings = { 
     "/$controller/$action?/$id?"{ 
      constraints { 
       // apply constraints here 
      } 
     } 

     "/"(view:"/index") 
     "500"(view:'/error') 

     "/index.gsp"(uri:"/") 
    } 
} 
+1

UrlMappings में उरी के साथ पुनर्निर्देशन करता है? मैंने कोशिश की (थोड़ा अलग उपयोग के लिए), और ऐसा नहीं हुआ। एक त्रुटि मिली है कि नियंत्रक शून्य था। मुझे नियंत्रक से रीडायरेक्ट करना पड़ा। – mcv