2012-05-26 10 views
5

सादगी की खातिर:एक सेट कैसे संपादित करें <? GWT संपादक ढांचे के साथ EntityProxy> बढ़ाता है?

public class Person 
{ 
    String name; 
    Set<Address> addresses; 
} 

public class Address 
{ 
    String city; 
    String street; 
} 
साथ

और

public interface PersonProxy extends EntityProxy 
{ 
    public String getName(); 
    public Set<AdressProxy> getAddresses(); 
} 

और

public interface AdressProxy extends EntityProxy 
{ 
    public String getCity(); 
    public String getStreet(); 
} 

मिलान मैं यह मेरे लिए स्पष्ट में ListEditor उपयोग करने के लिए कैसे UiBuinder कक्षाएं मिला AddressProxy संपादित करने के लिए और अगर मुझे सूची मिलती है लेकिन डेटा व्यक्ति वर्ग में सेट किया गया है, तो मैं उन्हें संपादित करने के लिए संपादक फ्रेमवर्क का उपयोग कैसे करूं? या हो सकता है कि जब मैं PersonProxy बनूं तो सूची में सेट को कैसे परिवर्तित करूं?

मैं एडाप्टर संपादक वर्ग का एक प्रकार है कि

LeafValueEditor<Set<AddressProxy>> 

और फिर लागू करेगा एक सूची के लिए LeafValueEditor.setValue() के अंदर डाल दिया और एक नया driver.edit शुरू करने के लिए एक प्रयास किया था() पर एक अलग संपादक पदानुक्रम जो सूची संपादन का ख्याल रखता है लेकिन अब भाग्य के साथ।

उत्तर

6

आपको CompositeEditor<Set<AddressProxy>, AddressProxy, AddressEditor> बनाना चाहिए, ListEditor के समान, लेकिन List के बजाय Set को संभालना चाहिए। मुझे लगता है कि आप किसी भी तरह ListEditor पर प्रतिनिधि हो सकते हैं हालांकि मुझे वास्तव में यकीन नहीं है।

+0

धन्यवाद! यह शुरू करने के लिए कुछ है। स्पष्ट रूप से आलसी मुझे कुछ कोड के लिए एक लिंक के लिए उम्मीद की :-)। –

+1

मुझे लगता है कि कुछ प्रकार के मानक 'SetEditor' (शायद' ListEditor' को प्रतिनिधि) जीडब्ल्यूटी द्वारा प्रदान किया जाना चाहिए। मुझे ओपी के समान समस्या थी और 'ListEditor' का उपयोग करने में सक्षम होने के लिए डोमेन क्लास पर 'सूची' टाइप किए गए एक्सेसर्स (वास्तविक 'सेट'-टाइप की गई संपत्ति को परिवर्तित करना) को उजागर करना समाप्त हो गया। लेकिन ऐसा करना हमेशा संभव नहीं होता है (कभी-कभी हमें क्लाइंट साइड पर 'सेट'-वार व्यवहार की आवश्यकता होती है) –

+2

समस्या यह है कि ए) परिभाषा के अनुसार सेट में कोई विशिष्ट ऑर्डर नहीं है और मानों के लिए उप-संपादक आवश्यक रूप से _list_ हैं, और बी) आप शायद संपादन के दौरान डुप्लिकेट मानों को अनुमति देना चाहते हैं और केवल _flush_ समय पर विशिष्टता की जांच करना चाहते हैं, लेकिन जब आप मामले में हैं तो आपको किसी भी तरह उपयोगकर्ता को बताना होगा ("हे, मेरे पास 4 मान थे और जब मैंने इसे सहेजा था केवल 3 रखा उनमें से!"); और विशिष्टता इस बात पर निर्भर करती है कि आपने संपादित वस्तुओं में 'बराबर() 'को कैसे कार्यान्वित किया। यदि आप _standard_ 'SetEditor' के साथ आ सकते हैं, तो कृपया इसे योगदान दें! –

3

मैं अंक और मार्गों (एक मार्ग एन अंक शामिल हैं) के साथ यह किया है:

मार्ग (मिश्रित):

@UiField 
TextBox name; 

@Ignore 
@UiField 
FlexTable listPoints; 

PointsEditor pointsEditor = new PointsEditor(); 

    .... 

pointsEditor.add(String id); 

PointsEditor:

public class PointsEditor implements HasRequestContext<List<PointProxy>>, ValueAwareEditor<List<PointProxy>> { 

    List<PointProxy> points = new ArrayList<PointProxy>(); 

    public void add(String id) { 
     PointProxy point = ctx.create(PointProxy.class); 
     point.setId(id); 
     points.add(point);   
    } 

मार्ग (सर्वर साइड):

@Embedded 
private List<Point> points = new ArrayList<Point>(); 

राउट eProxy

public interface RouteProxy extends EntityProxy { 

     abstract List<PointProxy> getPoints(); 

     abstract void setPoints(List<PointProxy> points); 

PointProxy

public interface PointProxy extends ValueProxy { 

... 

} 
+0

मुझे लगता है कि आपका क्या मतलब है लेकिन सवाल यह है: यह देखते हुए कि प्वाइंटप्रॉक्सी के कई फ़ील्ड हैं और इसका एक संपादक स्वयं कैसे डॉट्स को जोड़ता है? और ध्यान दें कि प्रश्न सेट सूची संपादन के बारे में है, जीडब्ल्यूटी एसडीके और संबंधित नमूना कोड में सहायक संपादन सहायक है। –

+0

रूटप्रोक्सी (EntityProxy) और प्वाइंटप्रोक्सी (ValueProxy) का उल्लेख करना भूल गए। दोनों जवाब पर जोड़े गए थे। बस सूची के स्थान पर सेट के साथ करने का प्रयास करें। –

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