2011-06-28 9 views
5

मेरी जीडब्ल्यूटी परियोजना में मेरी सेवा शील्ड का एक ऑब्जेक्ट देता है जिसे मैंने परिभाषित किया है। शील्ड प्रकार क्लाइंट और सर्वर दोनों द्वारा उपयोग किया जा रहा है, मैंने साझा पैकेज में कक्षा परिभाषा डाली है।साझा पैकेज में जीडब्ल्यूटी के नंबरफॉर्मैट क्लास का उपयोग

शील्ड वर्ग com.google.gwt.i18n.client.NumberFormat वर्ग (के लिए एक स्थानापन्न, दूसरों के बीच, java.text.DecimalFormat) का उपयोग करता है।

मुद्दा यह है कि NumberFormat साझा पैकेज में नहीं रखा जा सकता, क्योंकि यह GWT.create का उपयोग कर() LocaleInfo का एक उदाहरण बनाता है।

क्या कोई तरीका है कि मैं com.google.gwt.i18n.client.NumberFormat साझा पैकेज के भीतर से उपयोग कर सकता हूं?

उत्तर

2

संक्षेप में, नहीं।

साझा संकुल ही नहीं कर रहे हैं (और CAN) किसी भी तर्क या डेटा प्रकार दोनों क्लाइंट और सर्वर द्वारा प्रयोग किया जाता शामिल करना चाहिए।

कारण gwt उनकी संख्या स्वरूप वर्ग प्रदान करता है में अपने words, है -

कुछ कक्षाओं में, वर्ग की कार्यक्षमता भी महंगा पूरी तरह से नकल करते है ताकि एक और पैकेज में एक ऐसी ही दिनचर्या प्रदान की जाती है बजाय।

वाइस विपरीत, NumberFormat की GWTs कार्यान्वयन (आपके मामले में जावा) जावास्क्रिप्ट विशिष्ट और निश्चित रूप से सर्वर साइड में नहीं किया जा सकता है।

आपको क्रमशः इस वर्ग से और सर्वर पक्ष (जावा के नंबरफॉर्मेट का उपयोग करके) और क्लाइंट साइड (gwt's numberFormat का उपयोग करके) में स्वरूपण तर्क को आजमाने और स्थानांतरित करना होगा। आप बाकी को साझा पैकेज में रख सकते हैं।

+0

@Bhat धन्यवाद, मैंने सोचा था कि इस मामले हो सकता है। कितना दुर्भाग्यपूर्ण है :-( – luketorjussen

5

मैंने ShareNumberFormat बनाकर और फिर सर्वर संस्करण के लिए एक खाली क्लाइंट साइड स्टब बनाकर इस समस्या को हल किया है जिसका उपयोग कभी नहीं किया जाता है।

यहाँ मेरी SharedNumberFormat.java, जो आपने सही अनुमान लगाया, साझा कोड में इस्तेमाल किया जा सकता है और ठीक से काम करेंगे दोनों क्लाइंट और सर्वर साइड:

import java.text.DecimalFormat; 

import com.google.gwt.core.client.GWT; 
import com.google.gwt.i18n.client.NumberFormat; 

/** 
* The purpose of this class is to allow number formatting on both the client and server side. 
*/ 
public class SharedNumberFormat 
{ 
    private String pattern; 

    public SharedNumberFormat(String pattern) 
    { 
     this.pattern = pattern; 
    } 

    public String format(Number number) 
    { 
     if(GWT.isClient()) 
     { 
      return NumberFormat.getFormat(pattern).format(number); 
     } else { 
      return new DecimalFormat(pattern).format(number.doubleValue()); 
     } 
    } 
} 

मैं तो java.text.DecimalFormat कार्यान्वयन बाहर ठूंठ मेरी सुपर स्रोत में: क्योंकि मैं उस वर्ग सर्वर साइड का उपयोग करें और संकलक इसके बारे में एक फिट में हो जाता है अगर वे वहाँ नहीं कर रहे हैं

package java.text; 

/** 
* The purpose of this class is to allow Decimal format to exist in Shared code, even though it is never called. 
*/ 
@SuppressWarnings("UnusedParameters") 
public class DecimalFormat 
{ 
    public DecimalFormat(String pattern) {} 

    public static DecimalFormat getInstance() {return null;} 
    public static DecimalFormat getIntegerInstance() {return null;} 

    public String format(double num) {return null;} 
    public Number parse(String num) {return null;} 
} 

मैं वहाँ में अतिरिक्त तरीकों की है।

अंत में, अपने * .gwt.xml के लिए अपने सुपर-स्रोत टैग को जोड़ने के लिए भूल जाते हैं नहीं है:

<super-source path="clientStubs"/> 
+0

यह सुंदर है। जीडब्ल्यूटी को वास्तव में इसका समाधान होना चाहिए। – vinnyjames

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