मेरा एक पूर्व सहयोगी ने जावाबीन के बारे में आधे घंटे पहले एक चर्चा शुरू की, और क्यों उन्होंने जेएसएफ में जिस तरह से काम करना चाहते थे, उतना काम नहीं किया। विशेष मामला बूलियन गुणों के बारे में है।जावाबीन और आत्मनिरीक्षण - बूलियन और अनुक्रमित गुणों पर गड़बड़?
। isUrl
ग्रहण नाम के एक बूलियन संपत्ति के लिए यह
private boolean isUrl;
public boolean isUrl() {..}
public boolean setUrl(boolean url) {..}
उत्पन्न करता है लेकिन इस JSF में काम नहीं करता। उन्होंने कहा कि यह public boolean getIsUrl()
जोड़ने कार्यान्वयन गाड़ी हो सकता है द्वारा काम करते हैं, तो यकीन है कि जो सही है, इसके बाद के संस्करण कोड के लिए आत्मनिरीक्षण एपीआई .:
BeanInfo info = Introspector.getBeanInfo(ClassTest.class);
for (PropertyDescriptor pd : info.getPropertyDescriptors()) {
System.out.println(pd.getName() + ": " + pd.getReadMethod() +
" : " + pd.getWriteMethod());
}
का उपयोग करके, यह दोनों तरीकों प्रिंट करते हैं बनाया - यानी ग्रहण सही है, JSF गलत है। लेकिन यह मेरे लिए संदिग्ध लग रहा था, क्योंकि the specification डबल "है" के बारे में कुछ भी उल्लेख नहीं करता है।
लेकिन spec के माध्यम से देखते हुए, मैंने कुछ ऐसा देखा जो मैंने कभी नहीं उपयोग किया - तथाकथित अनुक्रमित गुण। आपके पास private String[] bar
और फिर public String getBar(int idx)
हो सकता है। तो:
। मैंने कोशिश की कि Introspector
के साथ, और इसे बार के लिए पढ़ने की विधि नहीं मिली। उपरोक्त कोड का परिणाम था: bar: null : null
। तो मुझे लगता था - अब इंट्रोस्पेक्टर spec का पालन नहीं करता है। शायद यह पिछले मामले में इसका पालन नहीं करता था, और आखिरकार, जेएसएफ सही है। वास्तव में, अनुक्रमित गुण ऐसा कर सकते हैं कि किसी दिए गए संपत्ति के लिए दो पढ़ने के तरीके हैं। और आत्मनिरीक्षण API के PropertyDescriptor
वर्ग के साथ यह संभव नहीं है।
इससे हमें क्या कारण होता है - हमारे पास संभावित रूप से टूटा हुआ एपीआई है जो कल्पना के अनुरूप नहीं है। जो spec के अन्य कार्यान्वयन की ओर जाता है (जेएसएफ स्पष्ट रूप से एक कस्टम का उपयोग करता है)। जो आगे गलतफहमी और भ्रम की ओर जाता है।
मुझे परेशान करने वाली किसी चीज़ के लिए एक सिडेनोट - जावाबीन्स स्पेक में वे "डिजाइन पैटर्न" विधियों के लिए नामकरण सम्मेलन कहते हैं। यह मेरे लिए गलत लगता है।
तो, अब सवाल पर:
- JavaBeans कल्पना स्पष्ट
- है आत्मनिरीक्षण एपीआई सही
- है एक नया JavaBeans विनिर्देश की जरूरत है, कम से कम बूलियन्स के व्यवहार को स्पष्ट करने का (जो एक हद तक व्यक्तिपरक)
अद्यतन। ऐसा लगता है कि जेएसएफ उपयोग bean.isUrl
bean.url
से अधिक है। जो दोषों को समझता है कि isUrl()
एक्सेसर के साथ काम नहीं करना है।
पीएस जेडीके 1.6.0_20, जेएसएफ 1.2, माईफेसेस
शायद सी # गुणों की तरह कुछ आसान हो जाएगा। – Bozho
इंट्रोस्पेक्टर कोड पढ़ने के बाद, isXxxx काम करना चाहिए। इस्तेमाल किए गए क्षेत्र का नाम कोई फर्क नहीं पड़ता। क्या आपने जावा 6 अपडेट 23 की कोशिश की है? –