2012-04-12 5 views
3

Wie ein GWT ValueListBox innerhalb eines Editor mit einer bestimmten Liste von Objekten zu implementieren, mein Code:GWT ValueListBox, Renderer und ProvidesKey

... 
@UiField(provided = true) 
@Path("address.countryCode") 
ValueListBox<Country> countries = new ValueListBox<Country>(
     new Renderer<Country>() { 

      @Override 
      public String render(Country object) { 
       return object.getCountryName(); 
      } 

      @Override 
      public void render(Country object, Appendable appendable) 
        throws IOException { 
       render(object); 
      } 
     },   
     new ProvidesKey<Country>() { 
      @Override 
      public Object getKey(Country item) { 
       return item.getCountryCode(); 
      } 

     }); 
... 

Das Land Klasse

public class Country { 
    private String countryName; 
    private String countryCode; 
} 

Aber während der GWT Kompilierung Ich erhalte diesen Fehler:

Type mismatch: cannot convert from String to Country 
+0

Könnten Sie die Klasse, die Sie erstellen, anfügen? Welche enthält das Feld Land. – cardamo

Antwort

2

Das Problem ist, dass Sie versuchen, diezu bearbeiten(Blick auf die Pfadannotation) mit Editor für Country. Um dies durchzuführen, sollten Sie den Pfad zu address.country ändern und die address.countryCode nach editorDriver.flash() zuweisen. Etwas wie:

Address address = editorDriver.flush(); 
address.setCountryCode(address.getCountry().getCountryCode()); 

Um dies zu unterstützen, sollte die Adressklasse der Länder Objekt als Eigenschaft.

Sie haben angenommen, dass die ValueListBox wie die klassische select funktioniert, in der der Schlüssel der Eigenschaft zugewiesen ist. Hier wird das gesamte Objekt zugewiesen. Also in Ihrem Fall Country Objekt kann nicht address.countryCode zugeordnet werden und umgekehrt.

Btw. Sie können den Renderer korrigieren (wie der Code unten) und sich um null Objekte als Argumente in den Renderer und Key Provider kümmern.

new Renderer<Country>() { 
... 
      @Override 
      public void render(Country object, Appendable appendable) 
        throws IOException { 
       appendable.append(render(object)); 
      } 
... 
} 
+0

Danke Goran !!! Ich habe meine Modellklasse gewechselt und alles funktioniert! – Christian