2008-10-22 24 views
14

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

<jsp:useBean id="pageBean" scope="request" type="com.epicentric.page.website.PageBean" /> 
<c:set var="pageDividers" value="<%= pageBean.getPageDividers() %>" /> 
<c:set var="numColumns" value="${pageDividers.size()}" /> 

चर pageDividers एक List वस्तु है।

मुझे इस समस्या का सामना करना पड़ रहा है: जब मैं pageDivider के आकार के लिए पूछता हूं, तो एक अपवाद फेंक दिया जाता है। मुझे पता है कि यह एक साधारण जेटीएसएल त्रुटि है - मैं क्या गलत कर रहा हूं?

त्रुटि संदेश है:

समारोह आकार एक डिफ़ॉल्ट नाम स्थान निर्दिष्ट नहीं है जब

मैं सही ढंग से कैसे पहुंच सकता है या मेरी pageDividers वस्तु के तरीकों कहते हैं एक उपसर्ग के साथ इस्तेमाल किया जाना चाहिए ?

उत्तर

27

JSTL, ${pageDividers.size} में संपत्ति के उपयोग के लिए डॉट ऑपरेटर (कोई () आवश्यक) getSize() नामक एक विधि के लिए एक कॉल में परिणाम का उपयोग करते समय।
चूंकि java.util.List size() नामक एक विधि प्रदान करता है (getSize() के बजाय) आप उस कोड का उपयोग करके सूची की लंबाई तक पहुंच नहीं पाएंगे। समारोह, जैसे

${fn:length(pageDividers)} 

नोट का इस्तेमाल किया है कि आदेश fn नाम स्थान का उपयोग करने के, आप घोषणा चाहिए लंबाई:


एक सूची के आकार के उपयोग करने के लिए, JSTL fn प्रदान करता है यह

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

इसके अतिरिक्त, उसी फ़ंक्शन का उपयोग किसी संग्रह प्रकार के साथ और स्ट्री के साथ किया जा सकता है एनजीएस भी।

+0

यह काम करता है, धन्यवाद! –

+1

सावधान रहें। मैं Websphere 6.12 में एक अस्पष्ट बग में भाग गया- ऐसा तब हुआ जब एक टैग बॉडी में एक जेएसटीएल समारोह निष्पादित किया गया था। यह वेबस्पेयर 6.13+ में तय है, लेकिन 6.13 से कम नहीं है। जैसा कि हम 6.11 का उपयोग करते हैं, हमें वास्तव में उन कार्यों के लिए कस्टम टैग जाना और बनाना था, जो वास्तविक कोड को प्रस्तुत करते थे। – MetroidFan2002

+5

यह बड़े cahones बेकार है। क्यों नहीं वे आपको कक्षा/उदाहरण का उपयोग कर एक विधि का आह्वान करते हैं !? आप जेईई मंच पर सभी प्रकार के वर्महोल्स में भागते हैं ... ffs! – momomo

2

ईएल का उपयोग करके एक बीन की संपत्ति तक पहुंचने के लिए आप बस संपत्ति का नाम दें (विधि का आह्वान न करें)। तो कहते हैं कि तुम तो

${pageDividers.size} 

सूचना नहीं() सेम में एक विधि getSize() कहा जाता है की सुविधा देता है।

संपादित करें: क्षमा करें ... मूल पोस्ट में एक त्रुटि हुई।

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

  • कोई संबंधित समस्या नहीं^_^