2012-01-07 15 views
5

संभव डुप्लिकेट:
Access the size of a collection in JSP/JSTL/ELक्यों ArrayList आकार() के बजाय आकार() प्राप्त नहीं करता है?

मैं कुछ JSP पृष्ठों में ArrayList का भारी इस्तेमाल बना रहा हूं। मैं बहुत की तरह एक ArrayList का उपयोग करना चाहते हैं:

${myArrayList.size} 

लेकिन चूंकि वस्तुओं चाहिए JavaBean मानक है, जहां myArrayList.getMyPropertyName() JSP/JSTL में ${myArrayList.myPropertyName} है के अनुरूप, myArrayList.size() समारोह सुलभ नहीं है।

क्या कोई अन्य वर्ग का उपयोग करना चाहिए?

अद्यतन:

यह स्वीकार करने के लिए कि इस तरह के JSP में अपने ArrayList के आकार में हो रही के रूप में एक सुविधा सिर्फ क्लीनर एक लाइनर्स के लिए बाहर छोड़ दिया है थोड़ा मुश्किल है, लेकिन यह वहाँ अन्य कारणों डिजाइनरों बजाय .size() चुना जा सकता है लगता है .getSize()

मुझे लगता है कि अगर आपको ${fn:length(myArrayList)} या ${myArrayList.getSize()} वाक्यविन्यास के लिए समर्थन है तो यह वास्तव में कोई समस्या नहीं है।

+2

क्योंकि जिस तरह से उन्होंने इसे लिखा था। [यहां] के अनुसार एफएन: लंबाई का उपयोग करें (http://stackoverflow.com/questions/3579548/access-the-size-of-a-collection-in-jsp-jstl-el) (और कई अन्य)। –

उत्तर

11

शीर्षक यह कहते हैं सभी: क्यों ArrayList नहीं है getSize () आकार के बजाय()?

के रूप में "Java Collections API Design FAQ" समझाया:

क्यों आप स्थिरता के लिए "बीन्स शैली नाम" का उपयोग नहीं किया?

नए कलेक्शन के नाम तरीकों "बीन्स नामकरण सम्मेलनों" का पालन नहीं करते, लेकिन हम मानते हैं कि वे , उचित संगत और उचित अपने उद्देश्य के हैं। इसे याद रखना चाहिए कि बीन्स नामकरण सम्मेलन पूरी तरह से जेडीके पर लागू नहीं होते हैं; एडब्ल्यूटी ने इन सम्मेलनों को अपनाया था, लेकिन निर्णय कुछ हद तक विवादास्पद था। हमें संदेह है कि संग्रह API का व्यापक रूप से उपयोग किया जाएगा, अक्सर कोड की एक पंक्ति पर एकाधिक विधि कॉल के साथ, इसलिए यह महत्वपूर्ण है कि नाम संक्षिप्त हो। उदाहरण के लिए, Iterator विधियों पर विचार करें। वर्तमान में, संग्रह पर एक लूप इस तरह दिखता है:

 for (Iterator i = c.iterator(); i.hasNext();) 
     System.out.println(i.next()); 
सब कुछ एक पंक्ति पर अच्छी तरह से फिट बैठता है, भले ही संग्रह का नाम एक लंबी अभिव्यक्ति है। अगर हमने "getIterator", "हैक्स्टक्लेमेंट" और "getNextElement" विधियों का नाम दिया है, तो यह अब केस नहीं होगा।इस प्रकार, हमने बीन्स शैली की बजाय "पारंपरिक" जेडीके शैली को अपनाया।

+1

तो, उम्मीद नहीं है कि आकार() को getSize() के पक्ष में प्रदर्शित किया जाएगा। – Matthew

+3

@ मैथ्यू यह निश्चित रूप से * प्रतिस्थापित * नहीं होगा * getSize() के साथ, लेकिन किसी भी तरह से, मुझे संदेह होगा कि आपकी परियोजना की समयरेखा जेडीके परिवर्तन के लिए आवश्यक समय का सामना नहीं करेगी। –

+1

@ मैथ्यू: नहीं। यहां तक ​​कि अगर सभी अचानक सहमत थे कि 'getSize() 'एक * प्राथमिकता * श्रेष्ठ नाम था, जो कभी भी" एपीआई हमेशा के लिए "मंत्र का अधिग्रहण नहीं करेगा। 'Java.util.List' इंटरफ़ेस में 'getSize()' जोड़ने के लिए यह कभी भी लायक नहीं होगा (क्योंकि इससे सभी मौजूदा कार्यान्वयन वर्गों को तोड़ दिया जाएगा), और उस परिवर्तन के बिना, यह' getSize 'जोड़ने के लिए कभी भी लायक नहीं होगा () 'to' java.util.ArrayList' (चूंकि यह केवल सरणी-सूचियों पर प्रयोग योग्य होगा, जिसमें सटीक प्रकार 'ArrayList') अभिव्यक्तियों द्वारा दर्शाया गया है। – ruakh

5

आप fn:length जेएसटीएल फ़ंक्शन का उपयोग करते हैं (docs देखें)।

पहले, JSP के शीर्ष पर fn नाम स्थान घोषित:

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 

और उसके बाद:

${fn:length(myArrayList)} 
+0

मेरी इच्छा है कि मैं इसका उपयोग कर सकूं। मैं टोमकैट के पुराने संस्करण के साथ काम कर रहा हूं जो संगत नहीं है। – Matthew

+1

@ मैथ्यू: क्यों नहीं? आपने कहा था कि आप जेएसपी ईएल (उदाहरण के लिए '$ {myArrayList.size} ') का उपयोग कर रहे थे, तो जेएसटीएल क्यों काम नहीं करता? – skaffman

+0

@ मैथ्यू फिर इसे एक कस्टम टैग में लपेटें, या पिछली छोर से लंबाई का पर्दाफाश करें। –

1

ईएल के नवीनतम संस्करण को विधि आमंत्रण ${collection.size()}

अन्य दो जवाब आप अधिक विवरण

  • को JavaBeans उद्देश्य पर विशिष्ट जानकारी के संग्रह एपीआई अनुरूप नहीं है देने का समर्थन करता है। ध्यान दें कि आकार जरूरी नहीं है एक संपत्ति। कुछ कार्यान्वयन इसे गतिशील रूप से गणना करते हैं। अन्य तरीकों के लिए भी चला जाता है - वे साधारण गुण नहीं हैं, और उन्हें गेटर्स की तरह दिखाना अनुचित होगा।
  • ईएल 2.2 करने से पहले आप उपयोग कर सकते ${fn:length(collection)}

वैसे, एक JSP में आप सामान्य रूप से एक संग्रह की size() आवश्यकता नहीं होनी चाहिए - तुम सिर्फ यह पुनरावृति। अगर आपको कुछ गणना करना है, तो उसे सर्वलेट/नियंत्रक में करने का विचार करें। बेशक, मैं मानता हूं, यह कभी-कभी जेएसपी में उपयोग करने के लिए मान्य है।

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