2016-08-03 19 views
2

Angenommen, ich habe das unter Szenario:Vaadin Grid SetColumn() - Gruppenelement-Objekts Feld als eine Spalte

Es gibt zwei Einheiten:

public class Address { 

    private City city; 
    private String street; 

    public String getStreet() { 
    return street; 
    } 

    public void setStreet(String street) { 
    this.street = street; 
    } 

    public City getCity() { 
    return city; 
    } 

    public void setCity(City city) { 
    this.city = city; 
    } 
} 

Und

public class City { 

    private String name; 

    public String getName() { 
    return name; 
    } 

    public void setName(String name) { 
    this.name = name; 
    } 
} 

Ich möchte Zeige den Namen einer Straße und einer Stadt auf einer Gitterkomponente mit BeanItemContainer, wie soll ich die Spaltennamen angeben?

P versucht mit "street" und "city.name", aber es löst eine Ausnahme aus.

java.lang.IllegalStateException: Found at least one column in Grid that does not exist in the given container: city.name with the header "Name". Call removeAllColumns() before setContainerDataSource() if you want to reconfigure the columns based on the new container. 

Antwort

3

Sie den Code nicht zeigen, haben mit dem Netz bezogen, jedoch können Sie unter mindestens 2 Möglichkeiten sehen, es zu tun (bitte beachten Sie, dass für die Bequemlichkeit ich einige Konstrukteure für Ihre Objekte erstellt haben):

Code:

public class MyUi extends UI { 
    @Override 
    protected void init(VaadinRequest request) { 
     // basic stuff 
     Layout content = new VerticalLayout(); 
     content.setSizeFull(); 
     setContent(content); 

     // container & grid 
     BeanItemContainer<Address> container = new BeanItemContainer<>(Address.class); 
     Grid grid = new Grid(container); 

     // 1) either manually add nested properties and hide the actual inner bean 
     container.addNestedContainerProperty("city.name"); 
     grid.getColumn("city.name").setHeaderCaption("City"); 
     grid.setColumns("street", "city.name"); // hide bean column 

     // 2) or make the container create nested properties for your inner beans 
     container.addNestedContainerBean("city"); 
     grid.getColumn("city.name").setHeaderCaption("City"); 

     // create some dummy data to populate the grid 
     City city = new City("There"); 
     Address address = new Address(city, "Here"); 
     container.addItem(address); 
     content.addComponent(grid); 
    } 
} 

Ergebnis:

Sample