2009-04-08 18 views
6

में ऑब्जेक्ट को सीरियलाइज करें GWT का उपयोग कर स्ट्रिंग में बीन को क्रमबद्ध करने का सबसे आसान तरीका क्या है? मैं GWT.create() आमंत्रण का उपयोग नहीं करना पसंद करता हूं।जीडब्ल्यूटी

+0

स्ट्रिंग आप किस तरह के बारे में बात कर रहे हैं? "संपत्ति = मूल्य" जोड़े की एक सूची? –

+1

किसी भी प्रकार की स्ट्रिंग, जब तक इसे मूल उदाहरण में आगे और पीछे परिवर्तित किया जा सके। –

उत्तर

4

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

कि त्याग रास्ते से बाहर के साथ :

एक GWT परियोजना मैं मैं पर काम किया के लिए बस सेम परिसीमक के द्वारा अलग के मूल्यों बाहर लिखा था। मानों को वापस पढ़ने पर, मैंने सरणी प्राप्त करने के लिए String.split() विधि का उपयोग किया। उस सरणी के साथ मैं मूल्यों को दाएं बीन गुणों पर वापस सौंपता हूं। कोड में:

public class Sample { 

    private int a; 
    private boolean b; 
    private String c; 
    //getters and setters for fields not shown 

    public String toHistoryToken(){ 
     return a+"/"+b+"/"+c; 
    } 
    public void fromHistoryToken(String token){ 
     String[] values=token.split("/"); 
     a=Integer.parseInt(values[0]); 
     b=Boolean.parseBoolean(values[1]); 
     c=values[2]; 
    } 
} 

अधिक जटिल परिदृश्यों के लिए आपको अधिक जटिल चीजें करना पड़ सकता है। उदाहरण के लिए, नेस्टेड ऑब्जेक्ट्स के लिए, आपको ऑब्जेक्ट को बच्चे ऑब्जेक्ट में पास करने के लिए कोड लिखना होगा।

साथ ही, ध्यान रखें कि आपको यह सुनिश्चित करना होगा कि आपके द्वारा उपयोग किए जाने वाले किसी भी मूल्य में डिलीमीटर नहीं है। इसलिए यदि आप जानते हैं कि आपके स्ट्रिंग्स में "/" हो सकता है तो आपको किसी भी नेस्टेड डिलीमीटर से बचने के लिए उनमें से एक प्रतिस्थापन() ऑपरेशन करना पड़ सकता है।

0

शायद यही वह है जिसे आप ढूंढ रहे हैं?

Json <-> Java serialization that works with GWT

विस्तारित संस्करण:

Json-लिब पुस्तकालय का उपयोग करना:

http://json-lib.sourceforge.net/

आप इस (सही सेम से json स्ट्रिंग के लिए जा रहा) कर सकते हैं:

http://json-lib.sourceforge.net/snippets.html#Creating_a_JSONObject_from_a_JavaBean

+0

ऐसा कुछ, लेकिन मैं अपने सभी वर्गों (40+) के लिए ओवरले प्रकार लिखना नहीं चाहता हूं। मैं किसी ऑब्जेक्ट को स्ट्रिंग में क्रमबद्ध करने के लिए एक सरल, गैर-घुसपैठ करने वाला तरीका चाहता हूं। –

+0

गैर-घुसपैठ करने वाला सापेक्ष है, क्योंकि मैं उन सभी डेटा के लिए ओवरले प्रकार बनाने पर विचार करता हूं, जिन्हें मैं पास करने जा रहा हूं, लेकिन अगर आप सीधे बीन से JSON स्ट्रिंग ऑब्जेक्ट में अपना रास्ता हैक करने का कोई तरीका चाहते हैं, तो मेरा अपडेट देखें। – Organiccat

+0

मुझे विश्वास है कि जेसन-लिब जीडब्ल्यूटी (क्लाइंट-साइड) में काम नहीं करेगा, क्योंकि यह शायद बीनइन्फो के माध्यम से प्रतिबिंब का उपयोग करता है। मैं अभी स्रोतों की जांच नहीं कर सकता। –

1

मुझे यकीन नहीं है कि मैं समझता हूं कि आप अंततः क्या करने की कोशिश कर रहे हैं।

यदि आप वास्तव में स्ट्रिंग्स को आगे भेजना चाहते हैं, तो आपको वास्तव में कुछ भी करने की आवश्यकता नहीं है - आप इसे सामान्य जीडब्ल्यूटी आरपीसी तंत्र का उपयोग करके मुफ्त में प्राप्त करते हैं। बस एक विधि बनाएं जो java.lang.String लौटाती है, साथ में कार्यान्वयन और असिंक इंटरफ़ेस बनाएं, और आप कर चुके हैं।

यदि दूसरी तरफ आप वास्तव में एक बीन भेजना चाहते हैं, तो बस सुनिश्चित करें कि इसमें शून्य-तर्क कन्स्ट्रक्टर है और Serializable या IsSerializable लागू करता है।

+0

मैं एक यूआरएल बार में एक बीन थूकना चाहता हूं, सबसे आसान संभव तरीका। –

+0

जैसा कि मिगुएल ने ऊपर कहा था, जीडब्ल्यूटी में कोई प्रतिबिंब नहीं है। आप एक कस्टम "toUrl()" विधि लिखने से बेहतर हो सकते हैं। –

0

वहाँ GWT के कुछ बारीकियों कि चीजें जटिल है, लेकिन आम तौर पर तरह बातें हो सकता है:

  • XML डेटा बाइंडिंग/मानचित्रण libs JAXB और XStream की तरह इस
  • JSON के साथ
  • कर सकते हैं, Jackson तरह पुस्तकालयों क्या कर सकते हैं लचीला पूर्ण बीन बाध्यकारी, जेएक्सबी के समान, लेकिन कम कॉन्फ़िगरेशन के साथ (और यदि यह बिल्कुल मायने रखता है तो तेज गति)।

काम करना चाहिए।

+0

यह कटौती नहीं करेगा क्योंकि इन libs शायद प्रतिबिंब का उपयोग करें, जो जीडब्ल्यूटी क्लाइंट पक्ष पर उपलब्ध नहीं है। –

0

आखिरकार जीडब्ल्यूटी जावास्क्रिप्ट में चल रहा है (भले ही यह जावा में लिखा गया हो)। उस अर्थ में "जावा बीन्स" ऐसी चीजें नहीं हैं जो आप आसानी से क्लाइंट में पा सकते हैं, लेकिन वे सर्वर (जावा में) में ठीक काम करते हैं।

यदि आप स्वीकार करते हैं कि एक बीन वास्तव में केवल एक विधिहीन वस्तु है, तो आप उनका उपयोग करने का अंतर्निहित इरादा डेटा को स्थानांतरित करने के लिए है। मूल रूप से जावास्क्रिप्ट में, जेएसओएन डेटा के लिए एक अत्यंत लचीला कंटेनर के रूप में भी कार्य करता है। सर्वर-साइड पर बीन्स की एक सरणी बीनयूटिल (और थोड़ी सी ट्रैवर्सल) का उपयोग करके जेएसओएन में परिवर्तित की जा सकती है। जेएसओएन को एक स्ट्रिंग के रूप में जीडब्ल्यूटी में क्रमबद्ध किया जा सकता है, और जीडब्ल्यूटी के पास जेएसओएन को क्लाइंट के लिए जावास्क्रिप्ट ऑब्जेक्ट्स में परिवर्तित करने के लिए एक पार्सर है।

शायद यह करने का सबसे आसान तरीका नहीं है, लेकिन यह काम करने के बाद यह बहुत लचीला है।