मेरे पास स्ट्रैट्स 2 (जेडीके 1.7, स्ट्रैट 2.2.1) एप्लिकेशन है जिसमें फ़िल्टरिंग मानदंडों की एक सूची है, जो मानचित्र में तारों के रूप में संग्रहीत है।Struts2 स्ट्रिंग सरणी में मेरी स्ट्रिंग को क्यों परिवर्तित कर रहा है?
Map< String, String > m_filters = new HashMap< String, String >();
public Map< String, String > getFilters() {
return m_filters;
}
मैं एक यूआरएल इस प्रकार फ़ॉर्मेट पारित:
हालांकि मानचित्र, दोनों कुंजी & मूल्य प्रकार स्ट्रिंग के रूप में निर्दिष्ट है इस
Map< String, String > filters = getFilters();
String value = filters.get("fromDate");
से एक मूल्य प्राप्त करने का प्रयास
इस अपवाद को फेंकने का कारण बनता है:
java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String
मैंने इसे एक यूनिट परीक्षण में पुन: उत्पन्न किया, और एक डीबगर में पुष्टि की कि स्ट्रूट्स 2 प्रत्येक पैरामीटर के लिए स्ट्रिंग के बजाय स्ट्रिंग [1] बना रहा है। यानी यह लंबाई -1 स्ट्रिंग सरणी है जिसमें एकमात्र स्ट्रिंग अपेक्षित मान (इस मामले में "0") है।
मेरा प्रश्न है: क्या यह स्ट्रूट 2 में एक बग है, या क्या मैं कुछ गलत तरीके से कर रहा हूं?
यदि यह एक बग है, तो क्या कोई ज्ञात कामकाज है?
क्या आप स्ट्रिंग मान = (java.lang.String) filter.get ("fromDate") आज़मा सकते हैं; और भाग खड़ा हुआ? –
खैर, समस्या यह है कि मानचित्र में स्ट्रिंग [] प्रविष्टियां हैं, स्ट्रिंग्स नहीं हैं, भले ही यह पैरामीटर (एसपी?) है <स्ट्रिंग, स्ट्रिंग> के साथ, इसलिए एक स्पष्ट कलाकार अभी भी त्रुटि का कारण बनता है। –
+1 बीटीडब्ल्यू क्योंकि यह दिलचस्प था मुझे यकीन नहीं है कि इस मामले में struts2 व्यवहार सबसे समझदार है। यह सच है कि आपको निम्नलिखित सम्मेलनों का पालन करना चाहिए, लेकिन यह भी सच है कि आप जो अनुभव कर रहे हैं वह सहज नहीं है। – Quaternion