2011-11-02 7 views
5

मैं redirect के साथ कुछ अजीब व्यवहार देख रहा हूं जब मैंने अपना app.context एक निश्चित तरीके से सेट किया है। मैं Grails JIRA जो पूरी तरह से मेरी समस्या का वर्णन में एक बग मिला है, लेकिन यह UTR के रूप में चिह्नित किया गया था:
मैं वर्तमान में Grails 2.0M2 उपयोग कर रहा हूँ: http://jira.grails.org/browse/GRAILS-7546app.context का उपयोग करते समय Grails गलत पते पर रीडायरेक्ट करता है?


यहाँ समस्या का मेरा वर्णन है। मैं अपने application.properties में परिभाषित निम्नलिखित गुण फ़ाइल है

app.context=/ 
app.name=foobar 

जब मैं एक नियंत्रक में redirect फोन, redirect uri मैं प्रदान करते हैं जो फिर एक 404. यहाँ का कारण बनता है पर ऐप्लिकेशन का नाम जोड़ रहा है मैं कैसे कर रहा है 'm यह कर:

String partialUrl = createLink(mapping: 'helloworld') // returns `/hello/world` 
redirect(uri: partialUrl) // INCORRECTLY redirects to 
          // `http://mysite.com/foobar/hello/world` 
          // instead of `http://mysite.com/hello/world` 

मान लें मैं एक यूआरएल मानचित्रण helloworld नामित /hello/world के रास्ते के साथ अपने UrlMappings.groovy फाइल में परिभाषित किया है।

तो, लम्बी कहानी संक्षेप में, अगर मैं सेट / को app.context, मैं नहींapp.name मेरा अंतिम रीडायरेक्ट URL में दिखाने की उम्मीद करेंगे।

क्या यह एक बग या अपेक्षित व्यवहार है? सबसे आसान तरीका पर कोई विचार मैं मैन्युअल चरणों के बिना रीडायरेक्ट यूआरएल का निर्माण कर सकता हूं?

उत्तर

0

यह आपके प्रश्न का सीधा अनुयायी नहीं है लेकिन मेरा अभ्यास है: मैं कभी भी grails गुणों में app.context को संशोधित नहीं करता क्योंकि टॉमकैट इसे उत्पादन पर ओवरराइड करता है और मुझे परवाह नहीं है कि यह मेरे देव पर किस संदर्भ का उपयोग करता है।

+1

सही ... टॉमकैट उत्पादन में app.context ओवरराइड कर सकता है, हालांकि समस्या अभी भी बनी हुई है कि 'रीडायरेक्ट' है कि Grails app.context का उपयोग करने के बजाय रीडायरेक्ट URL बनाने के दौरान app.name का उपयोग कर रहा है। – Polaris878

1

मुझे यह कहने से नफरत है, लेकिन मैं इसे पुन: पेश नहीं कर सकता। मैं एक नियंत्रक (हैलो नाम) के साथ एक परीक्षण प्रोजेक्ट बनाया, एक कार्रवाई है कि कुछ नहीं करता है बनाने लेकिन रीडायरेक्ट करने के लिए अपने कोड का उपयोग:

HelloController.groovy

package test1 

class HelloController { 
    def index() { 
     def model = [:] 
     model.content = 'content...' 
     model 
    } 

    def redir() { 
     String partialUrl = createLink(mapping: 'helloworld') // returns `/hello/world` 
     redirect(uri: partialUrl) // INCORRECTLY redirects to 
          // `http://mysite.com/foobar/hello/world` 
          // instead of `http://mysite.com/hello/world` 
    } 
} 

मैं एक सूचकांक पृष्ठ बनाया है index.gsp में विचारों/हैलो

index.gsp

UrlMappings में
<h1>index.gsp</h1> 
<html> 
    <body> 
     <p>This data is coming from the model:</p> 
     <p>content: ${content}</p> 
    </body> 
</html> 

सेटअप HelloWorld हैलो नियंत्रक के सूचकांक कार्रवाई करने के लिए मैप करने के लिए:

UrlMappings.groovy

class UrlMappings { 
    static mappings = { 
     "/helloworld"(controller: "hello", action: "index") 

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

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

और application.properties बदल app.context =/

application.properties

#Grails Metadata file 
#Sun Nov 06 14:51:56 EST 2011 
app.grails.version=2.0.0.RC1 
app.context=/ 
app.name=test1 
app.servlet.version=2.5 
app.version=0.1 

जब मैं एप्लिकेशन भाग गया है, मैं कर सकता स्थानीयहोस्ट पर जाएं: 8080/हैलो और यह मेरा सरल जीएसपी दिखाएगा। मैंने लोकलहोस्ट की कोशिश की: 8080/helloworld और इसे मैपिंग के अनुसार अपेक्षित भी मिला। फिर मैंने लोकलहोस्ट की कोशिश की: 8080/हैलो/रेडिर और मुझे ठीक से स्थानीयहोस्ट पर रीडायरेक्ट किया गया: 8080/helloworld।

हालांकि, अगर आपको अभी भी इस समस्या का सामना करना पड़ रहा है, तो मेरे पास कुछ सुझाव हैं 1) createLink के बजाय 2.0 में उपलब्ध नए लिंक जनरेटर का उपयोग करने का प्रयास करें। यह कुछ भी अलग नहीं कर सकता है, लेकिन कोशिश करने लायक है: grailsLinkGenerator.link(mapping: 'helloworld') 2) यदि यह केवल नियंत्रकों के भीतर से रीडायरेक्ट पर है, तो आप केवल http://mysite.com भाग को partialUrl में जोड़ सकते हैं। 3) अंतिम उपाय, बाद में संलग्न फ़िल्टर लिखें, देखें कि regex खोज करता है और mysite.com/foobar के लिए सामग्री पर प्रतिस्थापित करता है। यह सुनिश्चित नहीं है कि यह रीडायरेक्ट को पकड़ लेगा, लेकिन अगर कुछ भी होगा, तो मुझे लगता है कि यह ऐसा होगा क्योंकि फ़िल्टर व्यापक स्तर पर लागू किए जा सकते हैं।

1
def yourAction = { 

     redirect(uri:"helloworld") 

    } 

यह आपके लिए काम नहीं करता है?

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