2011-07-08 8 views
5

मैं दृश्य घटक के रूप में Freemarker के साथ एक वसंत-MVC आवेदन किया है।मैं एक URL पैरामीटर में एक हैश कुंजी कैसे सबमिट करूं?

मेरे टेम्पलेट्स में, कई लिंक जेनरेट किए जाते हैं जो मेरे एप्लिकेशन पर वापस इंगित करते हैं और जिसमें हैश कुंजी (#) वाले यूआरएल पैरामीटर शामिल हैं।

उदाहरण:

पैरामीटर: Q#106368 11

यूआरएल एन्कोडेड परम Freemarker द्वारा उत्पन्न: testurl.html?key=Q%23106368%2011

मैं जावास्क्रिप्ट का उपयोग इस URL (कारण पर रीडायरेक्ट करने: मैं जे एस 2 फ्रेम की लोडिंग का प्रबंधन करने के लिए उपयोग एक ही समय में)। ,

function redir(url) { 
     window.location.href = url; 
    } 

जे एस Freemarker द्वारा उत्पन्न कॉल लग रहा है मेरे समस्या

तरह
<a href="javascript:redir('http://localhost:8080/testappp/testurl.html?key=Q%23106368%2011');">test</a> 

कि ब्राउज़र/जावास्क्रिप्ट वापस धर्मान्तरित यूआरएल इनकोडिंग पैरामीटर है सोचता है:

रीडायरेक्ट विधि सरल है एक # और वहाँ बंद कटौती।

जब मैं window.location.href='http://...' का उपयोग करता हूं तो यह सीधे काम करता है। केवल विधि पैरामीटर का उपयोग करते समय यह जादुई रूप से यूआरएल डीकोड किया जाता है और फिर रीडायरेक्ट विफल रहता है क्योंकि यूआरएल # पर काटा जाता है।

क्या पैरामीटर को सही ढंग से प्रेषित करने का कोई आसान तरीका है?

मुझे पता है कि मैं # को प्रतिस्थापित कर सकता हूं, उदा। $$$hash$$$, टेम्पलेट में साथ और फिर सर्वर साइड पर प्रतिस्थापन है। लेकिन ऐसे कई स्थान हैं जिन्हें मुझे बदलना होगा ...

उत्तर

7

जैसा कि मार्क बी ने टिप्पणी की, यूआरएल फिर से एन्कोड करना आवश्यक है। विधि encodeURI() होगा। हालांकि, यह विधि # चिह्न को एन्कोड नहीं करती है। मेरे विशिष्ट उपयोग मामले के लिए, मुझे एन्कोडिंग के बाद %23 के साथ # साइन को प्रतिस्थापित करना होगा।

रीडायरेक्ट जे एस विधि अंत में लगता है कि:

function redir(url) { 
     url = encodeURI(url); 
     url = url.replace(/#/g, '%23'); 
     window.location.href = url; 
    } 

Comparing escape(), encodeURI(), and encodeURIComponent()

2

आप किस ब्राउज़र का उपयोग कर रहे हैं? मैं फ़ायरफ़ॉक्स 5 की कोशिश कर रहा हूं और यह मेरे परीक्षण में %23 को # में परिवर्तित नहीं करता है। जब आप लिंक पर माउस या लिंक स्थान कॉपी करते हैं, तो उसके पास क्या होता है? क्या आप वाकई जो कुछ लिंक रूपांतरण नहीं कर रहा है outputting है कर रहे हैं?

अद्यतन

यह आदर्श नहीं है, लेकिन ऐसा लगता है कि यह समस्या हल की तरह:

<a onclick="url = 'http://localhost:8080/testappp/testurl.html?key=Q%23106368%2011';" href="javascript:redir(url);">test</a> 

ऐसा लगता है href विशेषता की तरह डीकोड कर रहा है। जब मैं उस पर माउस लगाता हूं तो मैंने %23 के बजाय # देखा।

+0

है माना। कोई भी ब्राउज़र जो * * इस भागने को वापस परिवर्तित करता है, बकवास का एक गंभीर टुकड़ा होगा। –

+0

यही है, लिंक स्थान की प्रतिलिपि बनाएँ या सीधे कोड से इसका निरीक्षण करें। –

+0

आपके उत्तर के लिए धन्यवाद। मैंने एक नजदीकी नजर डाली और मैं एक विवरण का उल्लेख करना भूल गया जो बहुत महत्वपूर्ण है लेकिन मैंने कभी सोचा नहीं कि यह होगा। मैं जावास्क्रिप्ट रीडायरेक्ट विधि का उपयोग करता हूं और यह तब होता है जब मैं इस विधि का उपयोग करता हूं। जब मैं ब्राउज़र में यूआरएल कॉपी और पेस्ट करता हूं तो यह ठीक काम करता है। तो यह जावा/स्प्रिंग/ब्राउज़र समस्या नहीं है, यह एक जावास्क्रिप्ट मुद्दा है। मैंने तदनुसार सवाल अपडेट किया है। – tvirtualw

0

encodeURIComponent/decodeURIComponent अधिक गहन से सिर्फ encodeURI, यह डिकोड होगा/एनकोड '#' और घटना '/'