2010-06-03 9 views
5

कोई फ़ॉर्म पोस्ट होने पर गुण (पैरामीटर नहीं) गुण सेट करने का कोई तरीका है?जब कोई फॉर्म पोस्ट किया गया है तो अनुरोध अनुरोध सेट करें

समस्या जो मैं हल करने की कोशिश कर रहा हूं वह है: मेरे पास एक जेएसपी पृष्ठ कुछ ड्रॉपडाउन सूचियों में कुछ डेटा प्रदर्शित करता है। जब फॉर्म पोस्ट किया जाता है, तो मेरा कंट्रोलर सर्वलेट इस अनुरोध को संसाधित करता है (फॉर्म में सेट/निर्दिष्ट पैरामीटर के आधार पर) और उसी जेएसपी पेज पर रीडायरेक्ट करता है जो अतिरिक्त विवरण प्रदर्शित करना है। अब मैं वही डेटा प्राप्त करने के लिए पुन: गणना या पुनर्मूल्यांकन किए बिना ड्रॉपडाउन सूचियों में समान/पहले डेटा प्रदर्शित करना चाहता हूं।

और कहा गया जेएसपी पृष्ठ में, फॉर्म में ड्रॉपडाउन सूचियों को अनुरोध गुणों के माध्यम से निर्दिष्ट डेटा द्वारा पॉप्युलेट किया जाता है। अभी, फॉर्म पोस्ट किए जाने के बाद और मुझे उसी जेएसपी पेज पर रीडायरेक्ट किया गया है, ड्रॉपडाउन सूचियां खाली हैं क्योंकि आवश्यक अनुरोध विशेषताएं मौजूद नहीं हैं।

जब मैं वेब ऐप्स की बात करता हूं तो मैं काफी n00b हूं, इसलिए एक स्पष्ट & इस समस्या का आसान समाधान मुझे इस समय से बच निकलता है!

मैं सर्वलेट में नियंत्रण प्रवाह को पुन: स्थापित करने के सुझावों के लिए खुला हूं।

इस ऐप के बारे में कुछ विवरण: मानक सर्वलेट + जेएसपी, जेएसटीएल, अपाचे टॉमकैट 6.0 में चल रहा है।

धन्यवाद।

+0

क्या आपका मतलब क्वेरी स्ट्रिंग पैरामीटर है? – Affe

+0

नहीं, मेरा मतलब अनुरोध-स्कोप्ड विशेषताओं का था। मैं क्वेरी स्ट्रिंग को जितना संभव हो उतना छोटा और मीठा रखना चाहता हूं। – ssahmed555

+0

क्या आप अपने जेएसपी से फॉर्म कोड पोस्ट कर सकते हैं? – Michael

उत्तर

4

.. और एक ही JSP पृष्ठ पर रीडायरेक्ट ..

आप एक रीडायरेक्ट यहां आग नहीं करना चाहिए, लेकिन एक आगे। अर्थात।

response.sendRedirect("page.jsp"); 

नहीं करते बल्कि

request.getRequestDispatcher("page.jsp").forward(request, response); 

सभी मापदंडों और विशेषताएँ सहित इस तरह मूल अनुरोध जीवित रहता है, करते हैं। एक रीडायरेक्ट अर्थात् क्लाइंट को ब्रांड नए अनुरोध को आग लगाने के लिए निर्देश देता है, जिससे प्रारंभिक अनुरोध को गर्व किया जाता है।

JSP में आप ईएल में ${param} द्वारा अनुरोध पैरामीटर का उपयोग कर सकते हैं और आप अनुरोध का उपयोग कर सकते ${attributeKey} साथ उसी तरह जहां attributeKey विशेषता कुंजी है जो आप इस प्रकार सर्वलेट में अनुरोध दायरे में वस्तु स्थापित करने के लिए उपयोग किया है है गुण :

<input name="foo" value="${param.foo}"> 
:

request.setAttribute("attributeKey", someObject); 

एक JSP में HTML इनपुट मूल्यों को बनाए रखना करने के लिए के रूप में, तुम सिर्फ अनुरोध पैरामीटर मान के साथ तदनुसार <input> तत्व के value attribtue निर्धारित करने की आवश्यकता

यह टेम्पलेट टेक्स्ट में request.getParameter("foo") के परिणाम प्रिंट करता है। हालांकि यह एक XSS जोखिम है, बेहतर इस प्रकार JSTL के fn:escapeXml() की मदद से किसी भी उपयोगकर्ता नियंत्रित इनपुट से बचने के लिए है:

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 
... 
<input name="foo" value="${fn:escapeXml(param.foo)}"> 

एक ड्रॉपडाउन में चयनित विकल्प बनाए रखना थोड़ी अलग कहानी है।आपको मूल रूप से <option> तत्व के प्रश्न में सेट करने की आवश्यकता है। यह मानते हुए कि आप आमतौर पर ऐसा करेंगे- या List<JavaBean> विकल्प मानों को प्रदर्शित करने के लिए जेएसटीएल के <c:forEach> टैग का उपयोग करके, आप इसे निम्नानुसार हल कर सकते हैं (मानते हैं कि ${countries}Map<String, String> है जिसे आपने एक विशेषता के रूप में रखा है अनुरोध, सत्र या आवेदन गुंजाइश):

<select name="country"> 
    <c:forEach items="${countries}" var="country"> 
     <option value="${country.key}" ${country.key == param.country ? 'selected' : ''}>${country.value}</option> 
    </c:forEach> 
</select> 

यह selected विशेषता प्रिंट जब वर्तमान में दोहराया विकल्प कुंजी भेजा है उसमें एक अनुरोध पैरामीटर के नक्शे में बराबर होती है।

+0

मैं यह उल्लेख करना भूल गया कि मैं पहले से ही 'rd.forward (अनुरोध, प्रतिक्रिया) कर रहा हूं। लेकिन अभी मुझे परेशान करने वाला यह है कि आगे के बाद() जेएसपी की ड्रॉपडाउन सूचियां खाली हैं - और मैं नेटबीन्स के HTTP मॉनिटर में देख सकता हूं कि अनुरोध विशेषताएँ जिनमें ड्रॉपडाउन सूचियों को पॉप्युलेट करने के लिए उपयोग किया गया डेटा शामिल है, आगे के बाद मौजूद नहीं हैं() पूरा करता है। मैं sth याद कर रहा हूँ! – ssahmed555

+1

हू, HTTP मॉनीटर? क्या आप अनुरोध पैरामीटर के साथ अनुरोध विशेषताओं को भ्रमित नहीं कर रहे हैं? विशेषताएं HTTP अनुरोध/प्रतिक्रिया शीर्षलेख/शरीर में दिखाई नहीं दे रही हैं, लेकिन केवल सर्वर की स्मृति में। अनुरोध पैरामीटर HTTP अनुरोध/प्रतिक्रिया शीर्षलेख/शरीर में दिखाई दे रहे हैं। आपको वास्तव में समस्या के बारे में अधिक जानकारी प्रदान करने की आवश्यकता होगी। भले ही, मेरे उत्तर के अवशेष ने नई अंतर्दृष्टि नहीं लाई? – BalusC

+0

नहीं, लेकिन एनबी का HTTP मॉनिटर एक वेब ऐप में विभिन्न घटकों के बीच HTTP अनुरोध और प्रतिक्रिया यातायात को डीबग करने में सक्षम है, और यह उपलब्ध अनुरोध पैरामीटर और अनुरोध गुण दोनों दिखाता है - जब उपलब्ध हो। – ssahmed555

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