2011-08-19 15 views
38

का उपयोग कर जेएसपी से पैरामीटरयुक्त विधि को कॉल करने के लिए कैसे करें जेएसटीएल/ईएल का उपयोग कर जेएसपी से जावा क्लास में परिभाषित तर्कों के साथ जावा विधि को कैसे कॉल करें। विधि सरणी लौट रही है। किसी भी वापसी मूल्य का उपयोग किया जा सकता है।जेएसटीएल/ईएल

उत्तर

2

जेएसपी को कक्षा के एक उदाहरण का संदर्भ दें जिसमें विधि है और इसे कॉल करें।

आप शायद पूछ रहे हैं कि जेएसपी किस उदाहरण को देता है - यह मॉडल -2 एमवीसी व्यवस्था में एक सर्वलेट है।

यहाँ कैसे प्रवाह काम करता रहेगा:

  1. एक सर्वलेट को एक JSP से प्राप्त/पोस्ट अनुरोध सबमिट करें।
  2. सर्वलेट उस अनुरोध पर कार्य करता है और जेएसपी की ओर से कुछ काम करता है। अनुरोध, सत्र, या अन्य उपयुक्त दायरे में सभी आवश्यक वस्तुओं को डालता है।
  3. सर्वलेट मार्ग अगले जेएसपी को प्रतिक्रिया देता है, जो अनुरोध जेएसपी के समान हो सकता है।
  4. कुल्ला, दोहराना।
0

यदि आप जेएसएफ का उपयोग कर रहे हैं, तो आप व्यू स्कोप में मॉडल के रूप में एक बीन एक्ट का उपयोग कर सकते हैं और डेटा स्रोत स्वचालित से लोड कर सकते हैं। और यदि आप जेएसपी का उपयोग कर रहे हैं, तो टीएलडी टैग का उपयोग कैसे करें? और जेएसटीएल टैग <c:foreach> का उपयोग कर? यह स्मृति में सहेजने से स्मृति को सहेजता है, या सत्र में सहेजता है और घटना लोड होने पर इसे हटा देता है? कुछ यह कैसे (JSTL + TLD) की तरह

<c:forEach items="${myTag:getProductByPage(page)}" var="p"> 
    Product name: ${p.productName} 
</c:forEach> 
+0

मैं स्ट्रेट्स टाइल्स का उपयोग कर रहा हूं। क्या आप इसे या तो स्पष्टीकरण देते हैं, हमें एक मेट्रो को कॉल करने की आवश्यकता है जो पैरामीटर स्वीकार करता है, यहां यह जेएसपी में स्थापित ओलियन मान होंगे। –

55

आप केवल ईएल में तर्क के साथ विधियां प्रारंभ करता है, तो आप को लक्षित कर रहे हैं और एक सर्वलेट 3.0 संगत कंटेनर चल रहा है (जैसे बिलाव 7, Glassfish 3, JBoss 6 के रूप में, आदि कर सकते हैं) web.xml के साथ घोषित कॉन्फॉर्म 3.0 के साथ। यह सर्वलेट संस्करण ईएल 2.2 के साथ आता है जो तर्क के साथ मनमाने ढंग से उदाहरण विधियों का आह्वान करने की अनुमति देता है।

<c:forEach items="${bean.getArray('foo')}" var="item"> 
    ${item} <br /> 
</c:forEach> 

या यहाँ तक कि दूसरे के साथ:

यह मानते हुए कि आप गुंजाइश जो एक वर्ग जो public Object[] getArray(String key) की तरह एक विधि कुछ है की एक आवृत्ति को संदर्भित करता है में एक ${bean} है, तो आप ऐसा करने में सक्षम होना चाहिए तर्क

<c:forEach items="${bean.getArray(foo)}" var="item"> 
    ${item} <br /> 
</c:forEach> 

लेकिन अगर आप एक सर्वलेट 3.0 कंटेनर को लक्षित नहीं करते, तो आप तर्क के साथ तरीकों ईएल में बिल्कुल भी आह्वान नहीं कर सकते हैं के रूप में चर। आपकी सबसे अच्छी शर्त है कि डफिमो द्वारा सुझाए गए प्रीप्रोकैसिंग सर्वलेट में केवल नौकरी करना है।

Object[] array = bean.getArray("foo"); 
request.setAttribute("array", array); 
// ... 

एक पूरी तरह से अलग विकल्प के रूप में, आप एक ईएल फ़ंक्शन बना सकते हैं जो विधि कॉल का प्रतिनिधित्व करता है। आप कहीं this blog के नीचे एक किकऑफ उदाहरण पा सकते हैं। आप के रूप में की तरह कुछ खत्म करना चाहते हैं:

<c:forEach items="${util:getArray(bean, 'foo')}" var="item"> 
    ${item} <br /> 
</c:forEach> 

साथ
public static Object[] getArray(Bean bean, String key) { 
    return bean.getArray(key); 
} 
+1

मैं अनुरोध वस्तु के साथ कुछ ऐसा कर रहा हूं, 'isUserInRole (' role ') का आह्वान कर रहा हूं, लेकिन ग्रहण करें कि यह एक विधि है और विधि' getIsUserInRole() 'के बारे में शिकायत नहीं है। क्या आप जानते हैं कि यह कैसे तय किया जा सकता है? मैं ग्लासफ़िश v3 का उपयोग कर रहा हूँ। धन्यवाद, डी – Daniel

+2

@ डैनियल: ग्रहण ईएल वाक्यविन्यास जांच और सत्यापन के रूप में कमजोर है। ग्रहण में बस ईएल सत्यापन अक्षम करें, या जेबॉस उपकरण स्थापित करें। – BalusC

+0

धन्यवाद। मैंने इसे अक्षम कर दिया और यह काम किया। – Daniel

4

मेरे लिए ऊपर समाधान फ्लॉप काम। मेरे जावा क्लास में getRemitanceProfileInformation(user) फ़ंक्शन था। मैं जावा वर्ग की एक usebean बनाया और फिर

<c:set var="paymentValueCode" value='remittanceaddr.getRemitanceProfileInformation("${user}")'/> 

लागू है और यह काम किया।

+3

गलत संदर्भ, जो जानता है कि * उपरोक्त * समाधान था जब आपने उत्तर दिया था। – madth3