java - Struts2 Converting Enum Array fills array with single null value -
इन सदस्य चर के साथ एक साधारण एक्शन क्लास के लिए:
... निजी टेस्टकॉन्टरअनुम परीक्षण ; निजी टेस्टकॉन्टरनम [] परीक्षण; निजी सूची & amp;; TestConverterEnum & gt; tList; ...
और एक सरल एन्यूम:
सार्वजनिक enum TestConverterEnum {A, B, C; }
जब मैं अनुरोध भेजता हूं तो डिफ़ॉल्ट स्ट्रट्स 2 एन्यूम कनवर्ज़न का उपयोग करना:
testconterter.action? Test = & amp; tests = & amp; tList = & Amp; amp; b = asdf
परीक्षण
के लिए मुझे एक शून्य
मान मिलता है, जो उम्मीद की जाती है। सरणी और सूची के लिए, हालांकि, मैं एक अशक्त तत्व के साथ मिल और सरणी (या सूची)। यह क्या उम्मीद है? इसको रोकने के लिए कोई रास्ता नहीं है।
हमने हाल ही में हमारे स्ट्रट्स 2 संस्करण को उन्नत किया है, और हमारे पास हमारे स्वयं के कन्वर्टर्स थे, जो इस मामले में भी काम नहीं करते, इसलिए मैं डिफ़ॉल्ट रूपांतरण पद्धति का उपयोग करने की उम्मीद कर रहा था। हमारे पास पहले से ही कोड है जो null
और लंबाई के लिए इन सरणियों को मान्य कर रहा है, और मुझे इन शाखाओं को एक और शर्त जोड़ने की ज़रूरत नहीं है क्या इस विकृति को रोकने का कोई तरीका है?
हां, यह अपेक्षित व्यवहार IMO है
एचटीपी पैरामीटर सिद्धांत रूप में बहु-बहुमत (आमतौर पर बहुस्तरीय चयन सूचियों में प्रयोग किया जाता है) में है, इसलिए स्ट्रट्स 2 पैरामीटर इंटरसेप्टर सेटर्स के लिए (प्रतिबिंब द्वारा) पूछता है जो सरणियों को स्वीकार करते हैं या (एक दूसरे विकल्प के रूप में) एक मान। आपकी कार्रवाई में शायद एक setTests (TestConverterEnum [] a)
सेटर है, इसलिए, जब स्ट्रट्स 2 के इंटरसेप्टर को tests =
मैप करना पड़ता है, वह उस सेटर को पाया जाता है, और खुद को सोचता है: "मुझे यह 'परीक्षण संपत्ति को एक सरणी के साथ सेट करना होगा, चलो देखते हैं कि कितने पैरामीटर पारित किए गए ... केवल एक (खाली), तो चलो लंबाई की एक सरणी बनाएं और इसे रूपांतरण के साथ भर दें ..." आदि।
मुझे यह उचित लगता है: आपके अनुरोध में एक 'परीक्षण' पैरामीटर (हालांकि खाली) शामिल है, इसलिए एक-आकार की सरणी बनाई गई थी।
मुझे यह शर्त थी यदि आप TestConterter.action की कोशिश करते हैं तो test = & amp; tests =
की लंबाई 2 की एक सरणी बनाई जाएगी।
नवीनीकृत :
< पी> आइए देखें कि हम इस बात से सहमत हैं: एक अनुरोध में एक खाली पैरामीटर पास करने के लिए (सिद्धांत रूप में) नहीं उसी तरह से गुजर नहीं रहा है ... हालांकि अक्सर एक ही दोनों मामलों को समकक्ष मानना चाहता है ।यदि आप स्ट्रट्स 2 को बताना चाहते हैं: "पूरी तरह से खाली पैरामीटर्स को अनदेखा करें" ... मुझे नहीं लगता (इसे मानना एक स्वीकार्य विचार है) इस व्यवहार को कुछ वैश्विक सेटिंग द्वारा लागू किया जा सकता है। आप हमेशा अपना इंटरसेप्टर लिख सकते हैं (या पैरामीटर्स इंटरसेप्टर का विस्तार कर सकते हैं) ताकि इन्हें मैप करने से पहले रिक्त पैरामीटर को साफ किया जा सके।
BTW, ध्यान दें कि यह समस्या है एनरम्स या एरेज़ से कोई संबंध नहीं है, यह पूरी तरह से सामान्य है।
अब, बहुस्तरीय मापदंडों के मामले में अतिरिक्त विचार की आवश्यकता होती है। मुझे लगता है कि यदि आपके एक्शन के प्रकार की सरणी की एक सार्वजनिक संपत्ति है, तो यह इसलिए है क्योंकि यह कई मापदंडों के साथ सेट किया जा सकता है (एक चयन बहुविकल्पी आमतौर पर) - यदि नहीं, तो यहां कुछ डिज़ाइन समस्या है अब, इस अनुरोध के लिए आपका अपेक्षित व्यवहार क्या होगा?
TestConterter.action? Tests = & amp; परीक्षण = ए & amp; परीक्षण = & amp; परीक्षण = बी & amp; परीक्षण = बी < / पूर्व> क्या इस लंबाई 5 [null, A, null, B, B]
या 3 [A, B, B]
या 2 की एक सरणी उत्पन्न होती है [ए, बी] कोड> या क्या? सामान्य मानदंड देना मुश्किल है; यही कारण है कि सामान्य रूप से, यह आपके सेटर विधि में बेहतर है।
Comments
Post a Comment