java - EL में अज्ञात आंतरिक वर्ग सेम पर पैरामीटर(पैसों) के साथ तरीकों को लागू करें




jsp anonymous-inner-class (2)

संभवतः, आपको ईएल फ़ंक्शन बनाने की ज़रूरत है, हालांकि आप पैरामीटर पास कर सकते हैं। ( http://blog.idleworx.com/2010/04/custom-tags-and-custom-el-functions-in.html )

पद्धति तर्कों को पारित करने और गैर-प्राप्तकर्ता तरीकों को लागू करने के लिए समर्थन EL 2.2 में पेश किया गया था। टॉमकैट पर ईएल 2.2 को सक्षम करें ( http://code2inspire.wordpress.com/2010/11/05/how-to-enable-el-2-2-on-tomcat-6/ )

अगर मेरे पास इस तरह एक गुमनाम आंतरिक वर्ग वस्तु है (जहां फू इंटरफ़ेस है):

Foo foo = new Foo(){
  @Override
  public String hello(Object dummyArg){
    return "hello, world.";
  }
};

और मैं Foo.hello को कॉल करने का प्रयास करता Foo.helloFoo.hello इस तरह से एक जेएसपी से:

${foo.hello('blah')}

यह फेंकता है:

javax.el.MethodNotFoundException: Unable to find method [hello] with [1] parameters

लेकिन अगर कोई पैरामीटर नहीं हैं:

Bar bar = new bar(){
  @Override
  public String hello(){
    return "hello, world.";
  }
};

...

${bar.hello()}

यह बढ़िया काम करता है। क्यूं कर?

यह 7121303 का डुप्लिकेट नहीं है मैं विशेष रूप से गुमनाम आंतरिक कक्षाओं के बारे में पूछ रहा हूँ एक नियमित वर्ग के उदाहरण के साथ, यह किसी भी मापदंडों के साथ काम करता है।


मुझे नहीं पता कि आप कौन से वातावरण का उपयोग कर रहे हैं, लेकिन मैंने टॉमकैट 7.0.040 पर कोशिश की और आपका कोड ठीक काम करता है

एक संभावना यह है कि जब ऑब्जेक्ट की अपेक्षा होती है तो स्ट्रिंग गुजरने के साथ समस्या हो सकती है कुछ सख्त पार्सिंग हो सकते हैं क्या आप निम्नलिखित का प्रयास कर सकते हैं: तर्कसंगत पृष्ठ कोन्टेक्स्ट में स्टोर करें और इसका इस्तेमाल करने के लिए मान को पास करने के लिए उपयोग करें।

<%
pageContext.setAttribute("argObj", "blah");
%>

${foo.hello(argObj)}






anonymous-inner-class