2009-09-14 13 views
7

में एक सूची को तैयार करना मान लीजिए मुझे लगता है कि स्ट्रिंग की एक सूची लेता है एक कस्टम टैग है:ईएल

<%@ attribute name="thelist" type="java.util.List&lt;java.lang.String&gt;" 
    required="true" %> 

मैं jsp कि टैग कॉल में इस विशेषता को कैसे बना सकते हैं? मैं एक स्क्रिप्टलेट

<tags:list thelist='<%= java.util.Arrays.asList("blah","blah2") %>' /> 

इस्तेमाल कर सकते हैं लेकिन इस का उपयोग कर अभिव्यक्ति भाषा करने के लिए कोई रास्ता नहीं है, क्योंकि ऐसा करना पसंद किया जा रहा है?

उत्तर

8

सब आप क्या करना चाहते सूची बनाते हैं, तो आप [<jsp:useBean>][1] का उपयोग वांछित दायरे में वस्तु बनाने के लिए कर सकते हैं यह है:

<jsp:useBean id="thelist" scope="request" class="java.util.ArrayList" /> 

यह काम करता है क्योंकि ArrayList नो args निर्माता है। हालांकि, सूची में कुछ भी नहीं होगा। और, जहां तक ​​मुझे पता है, न तो ईएल और न ही जेएसटीएल संग्रह में वस्तुओं को जोड़ने के लिए एक अंतर्निहित तंत्र प्रदान करता है - वे दोनों केवल पढ़ने के लिए उपयोग पर केंद्रित हैं। मुझे लगता है कि add() विधि को सक्षम करने के लिए आप EL function mapping को परिभाषित कर सकते हैं।

हालांकि, मुझे लगता है कि आप जेएसपी को कुछ ऐसा करने के लिए मजबूर करने की कोशिश नहीं कर रहे हैं जो वह नहीं करना चाहता। इस मामले में, इसका मतलब है कि एक जेएसपी टैगफाइल का उपयोग करने के बजाय, आपको जावा में एक वास्तविक टैग हैंडलर लिखना चाहिए।

+0

यह अभी भी सच 4 साल बाद है : "न तो ईएल और न ही जेएसटीएल संग्रह में वस्तुओं को जोड़ने के लिए एक अंतर्निहित तंत्र प्रदान करता है"। यह – cahen

+2

@cahen करने का कोई तरीका नहीं मिला - मैंने कई वर्षों तक ईएल का भारी उपयोग नहीं किया है, लेकिन मुझे इसे बदलने का कोई कारण नहीं दिख रहा है। जेएसपी एक दृश्य प्रौद्योगिकी के रूप में है, और उत्परिवर्तन कुछ ऐसा है जो नियंत्रक को करना चाहिए। – kdgregory

3

kdgregory says के रूप में, आप इसे custom tag library functions के साथ कर सकते हैं, हालांकि यह सुंदर नहीं होगा। उदाहरण के लिए, कुछ इस तरह:

#{foo:add(foo:add(foo:add(foo:newList(), 'One'), 'Two'), 'Three')} 

आप केवल क्या इस्तेमाल किया की सीमाओं में चल रहे हैं Simplest Possible Expression Language कहा जाता है।

बीन की तरह किसी अन्य तंत्र के माध्यम से ऐसा करना आसान होगा।

+1

ईएल में 200 9 से नई विशेषताएं हैं: यह भी देखें [यह उत्तर] (http://stackoverflow.com/questions/10667650/pass-a-list-to-a-jsf-component-without-using-a-bean)। – McDowell

3

आप स्क्रिप्टलेट या बदसूरत ईएल कार्यों से बचना चाहते हैं, तो आप इस्तेमाल कर सकते हैं, जिसके आप स्वामी बिल्डर और ईएल दुभाषिया मूर्ख:

... 

<jsp:useBean id="listBuilder" class="com.example.ELListBuilder"/> 

<ul> 
    <c:forEach var="item" items="${listBuilder['red']['yellow']['green'].build}"> 
     <li>${item}</li> 
    </c:forEach> 
</ul> 

... 

चेक यहाँ उदाहरण: https://gist.github.com/4581179

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