2012-04-12 16 views
5

मैं जेनेरिक के साथ विकेट सहायक मॉडल के बारे में कुछ जानना चाहता हूं। मैं मॉडल, प्रोप मॉडल, और प्रोप कंपाउंड मॉडल समझा।कैसे विकेट मॉडल जेनेरिक के साथ काम करता है?

लेकिन मॉडल वर्ग के बारे में क्या? अगर मैं ऐसा करता हूं तो क्या होता है:

Label<Person> label = new Label<Person> ("someID", new Model<Person>()) 

उस लेबल में क्या दिखाया जाएगा? टूस्ट्रिंग आउटपुट?

आइए कहें कि मेरे पास टेक्स्टफ़िल्ल्ड में समान है। उस वस्तु में यह कितना मूल्य स्थापित करेगा?

+2

आप अभी कोशिश क्यों नहीं करते? – bert

उत्तर

7

विकेट का स्रोत कोड बहुत अच्छी तरह से प्रलेखित और आत्म-व्याख्यात्मक है। तो यहाँ

// Get converter 
final Class<?> objectClass = modelObject.getClass(); 

final IConverter converter = getConverter(objectClass); 

// Model string from property 
final String modelString = converter.convertToString(modelObject, getLocale()); 

आप देख सकते हैं कि विकेट एक IConverter का उपयोग करता है एक String को मॉडल वस्तु कन्वर्ट करने के लिए: LabelComponent कि इस तरह दिखेगा से getDefaultModelObjectAsString() उपयोग कर रहा है। डिफ़ॉल्ट ConverterLocator के कार्यान्वयन को देखते हुए आप देखेंगे कि अगर आपने इस प्रकार के ऑब्जेक्ट के लिए IConverter पंजीकृत नहीं किया है, तो विकेट DefaultConverter का उपयोग करेगा जो org.apache.wicket.util.lang.Objects ऑब्जेक्ट को String में बदलने के लिए स्थिर विधियों का उपयोग करेगा।

TextField भी एक IConverter का उपयोग करता है एक String करने के लिए और फिर से एक वस्तु को String से वस्तु कन्वर्ट करने के लिए। अंतर यह है कि विकेट toString विधि का उपयोग करते हुए हमेशा अज्ञात वर्ग को String में परिवर्तित करने में सक्षम है, लेकिन दूसरी तरफ नहीं। इसलिए यदि आप IModel<Person> का उपयोग TextField के साथ करना चाहते हैं तो आपको अपना IConverter<Person> कार्यान्वयन पंजीकृत करना होगा।

+3

तो इसे समेटने के लिए: यह 'toString()' विधि का उपयोग करता है। यदि आप कुछ अलग करना चाहते हैं, तो अपना स्वयं का कनवर्टर प्रदान करें। – biziclop

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