2010-08-26 23 views
6

जीडब्ल्यूटी का उपयोग करना मेरे पास जावा क्लास है:मैं जीडब्ल्यूटी में जावा ऑब्जेक्ट की संपत्ति को गतिशील रूप से कैसे एक्सेस कर सकता हूं?

public class Pojo { 
    private String name; 
    public String getName() { return name; } 
    public void setName(String name) { this.name = name; } 
} 

उपरोक्त क्लास क्लाइंट और सर्वर साइड कोड के बीच साझा किया जाता है।

क्लाइंट कोड से मैं गतिशील रूप से संपत्ति तक पहुंच बनाना चाहता हूं। यही है, मैं निम्नलिखित हस्ताक्षर के साथ एक विधि लिखना चाहता हूं:

public String getProperty(Object o, String propertyName) 

ऐसा है कि निम्न कोड काम करेगा:

Pojo pojo = new Pojo(); 
pojo.setName("Joe"); 
getProperty(pojo, "name"); // this should return "Joe" 

जावा प्रतिबिंब स्पष्ट रूप से बाहर है। और मैंने निम्नलिखित जेएसएनआई विधि की कोशिश की है:

public static native String getProperty(Object o, String name) /*-{ 
    return o[name]; 
}-*/; 

लेकिन यह काम नहीं करता है।

जावास्क्रिप्ट से जावा ऑब्जेक्ट्स तक पहुंचने के लिए special syntax का उपयोग नहीं किया जा सकता है क्योंकि मैं इसे गतिशील होना चाहता हूं।

कोई विचार मैं कैसे कर सकता हूं?

पूर्णता के लिए, मैं भी गतिशील रूप से एक संपत्ति सेट करने में सक्षम होना चाहता हूं।

संपादित करें: blwy10 का उत्तर मुझे "गतिशील संपत्ति पहुंच" जैसे शब्दों के बजाय "gwt प्रतिबिंब" का उपयोग करके खोजने के लिए एक महान युक्ति थी। यह मुझे gwt-ent पर ले जाता है, जिसमें एक बहुत ही सुरुचिपूर्ण प्रतिबिंब समाधान है। मैं इसे आजमाने की कोशिश कर रहा हूं, क्योंकि इसे एक अलग कोड जनरेशन चरण की आवश्यकता नहीं है।

+0

जे एस कोड GWT का उत्पादन न्यूनतम किया गया और डिफ़ॉल्ट रूप से समझ से परे है - तो वहाँ एक अच्छा मौका है कि अपने 'name' संपत्ति' xz' एक संकलन में बन जाता है और दूसरे में 'werq' - पहले से जानने का कोई तरीका नहीं है। आप obfuscation बंद कर सकते हैं, लेकिन इससे एक बड़ी जेएस फ़ाइल का कारण बन जाएगा। –

+0

प्रतीक्षा करें। जावा प्रतिबिंब क्यों है? –

+0

@ लुइस: क्योंकि हम यहां Google वेब टूलकिट (जीडब्ल्यूटी) के साथ काम कर रहे हैं - यह जावा को जावास्क्रिप्ट में अनुवाद करता है और केवल [जावा रनटाइम लाइब्रेरी का एक सबसेट] का समर्थन करता है (http://code.google.com/webtoolkit/doc/latest/ RefJreEmulation.html) –

उत्तर

2

यह सीधे आपके प्रश्न का उत्तर नहीं देता है, लेकिन क्या आपने इसे आजमाया है?

http://gwtreflection.sourceforge.net/

आशा इस मदद करता है!

+0

टिप के लिए धन्यवाद। इसने मुझे विभिन्न शर्तों का उपयोग करके गुगल कर दिया, जिसने मुझे यह पाया: http://code.google.com/p/gwt-ent/ मुझे यह बेहतर पसंद है, क्योंकि इसे एक अलग कोड जनरेशन चरण की आवश्यकता नहीं है। यह जीडब्ल्यूटी संकलन चरण में एकीकृत है। –

0

आप जीडब्ल्यूटी के AutoBean Framework का उपयोग कर सकते हैं। यहाँ 2 मिनट जल्दी और गंदा उदाहरण है:

public interface Person {  
    public String getName();  
    public void setName(String name);  
} 


public String getPropertyValue(Person p, String propertyName){ 
    return AutoBeanUtils.getAllProperties(AutoBeanUtils.getAutoBean(p)).get(propertyName); 
} 
संबंधित मुद्दे