2011-04-18 20 views
10

में बूलियन संपत्ति को पढ़ नहीं सकता है यदि किसी ऑब्जेक्ट प्रॉपर्टी को बूलियन (आदिम बूलियन नहीं) के रूप में घोषित किया जाता है तो ईएल में इसे पहचानने में कोई समस्या हो रही है!जेएसपी ईएल

आप निम्नलिखित वस्तु है कहो

class Case{ 
    private Boolean valid; 

    public Boolean isValid(){ 
     return this.valid; 
    } 

    public void setValid(Boolean val){ 
     this.valid = val; 
    } 
} 

हम "मामले" नाम के तहत अनुरोध में प्रकार के मामले की एक वस्तु डाल कहो, तो मैं JSP में इस प्रयास करें:

<td>Object is ${case.valid ? "Valid":"Invalid"} </td> 

यह मुझे त्रुटि देता है "वैध" ऑब्जेक्ट केस की संपत्ति नहीं है! अगर मैं बुलीयन से आदिम बूलियन में वैध बदलता हूं तो यह काम करता है!

क्या यह ईएल में बूलियन प्रकारों के साथ एक ज्ञात समस्या है कि उन्हें बूलियन के रूप में पहचाना नहीं जाता है बल्कि जावा "सामान्य" ऑब्जेक्ट्स के रूप में पहचाना जाता है? इसे संभालने का सही तरीका क्या है?

धन्यवाद

+0

मैं एक नोब जेएसपी उपयोगकर्ता हूं, लेकिन आपके 'वैध' ऑब्जेक्ट वेरिएबल घोषणा में 'निजी' का अर्थ यह नहीं है कि आप इसे सीधे एक्सेस नहीं कर सकते हैं? –

+0

हां, यह जावा दुनिया में सच है, लेकिन ईएल के साथ आप JavaBean शैली (object.propertyName) का उपयोग करके ऑब्जेक्ट गुणों तक पहुंच सकते हैं, जिससे आप एक गेटटर (इस मामले में वैध है) प्रदान करते हैं। तो जब आप केस कहते हैं। वैध आप वास्तव में case.isValid() कॉल कर रहे हैं। आप देख सकते हैं कि अगर मैं बूलियन को बुलियन में बदलता हूं तो यह ठीक काम करता है। – DhafirNz

+0

तो यदि आप विधि 'isValid()' कहते हैं, तो यह भी काम नहीं करता है? –

उत्तर

18

सभी उदाहरण मैंने कभी बात boolean के बारे में गुण है कि getProperty() और कभी नहीं Boolean रों के अलावा प्रपत्र isProperty() की ही टिककर खेल के लिए अनुमति देते देखा है।

मैं इस व्यवहार के लिए किसी भी 'सरकारी' संदर्भ नहीं मिल रहा है लेकिन this blog post वर्णन करने के लिए मैं क्या संदिग्ध जब मैं शुरू में टिप्पणी की है - एक Boolean एक वस्तु है, जबकि एक boolean एक आदिम है और जावा ऑटो मुक्केबाजी, ईएल है, जबकि isProperty() गेटटर को अनदेखा कर देगा जो Boolean देता है और इसके बजाय, getProperty() विधि देखेंगे।

तो मुझे लगता है कि, अपने उदाहरण में, यदि आप boolean बजाय Boolean करने के लिए isValid() की वापसी प्रकार बदल दिया है (लेकिन Boolean के रूप में क्षेत्र के प्रकार छोड़), आपके ईएल अभिव्यक्ति के रूप में आप उम्मीद कर काम करेंगे।

+2

ब्लॉग पोस्ट मौजूद नहीं है। –

2

ईएल बूलियन को एक वस्तु के रूप में मानता है (जो पूरी तरह से सही है) तो यह getValid() विधि की तलाश में है। यह JavaBeans विनिर्देश के साथ संगत है।

Boolean संदर्भ प्रकार से boolean आदिम प्रकार से अपनी संपत्ति बदलने का प्रयास करें। यदि यह संभव नहीं है और आप नए ईएल का उपयोग कर रहे हैं (यानी 2.2 - मुझे 2.1 के बारे में निश्चित नहीं है) तो आप एक विधि का आह्वान कर सकते हैं, इसलिए ${case.isValid()} इस नई ईएल सुविधा के सही उपयोग का एक उदाहरण होगा।

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