2016-07-04 12 views
0

Ich habe ein Vaadin (7.6.7) Raster, das eine Combobox im Editor-Modus zeigt. Eine andere Aktion kann die Elemente der Combobox ändern, aber die Combobox im Raster aktualisiert sich nicht.Vaadin Update Combobox Werte in einem Raster

public void setComboBoxAsEditor(Grid grid) { 
    grid.getColumn("id").setEditorField(theBox).setConverter(new Converter<String, String>() { 
    @Override 
    public String convertToModel(String value, Class<? extends String> targetType, Locale locale) throws ConversionException { 
     return value; // not sure for what this is required 
    } 

    @Override 
    public String convertToPresentation(String value, Class<? extends String> targetType, Locale locale) throws ConversionException { 
     // don't show the id, but the name 
     A a = endpoint.getA(value); 
     return a.getName(); 
    } 

    @Override 
    public Class<String> getModelType() { 
     return String.class; 
    } 

    @Override 
    public Class<String> getPresentationType() { 
     return String.class; 
    } 
}); 
} 

theBox ist eine Combobox, die vor gefüllt ist - die Anfangsanzeige korrekt ist (es enthält Objekte vom Typ A)

nun bearbeitet eine andere Aktion, um die Objekte vom Typ A, z.B. lösche ein Objekt.

Wie kann ich jetzt die Combobox im Grid aktualisieren?

Ich versuchte

public void upateCombobox() { 
theBox.removeAllItems(); 
List<A> as = endpoint.getAs(); 
theBox.setContainerDataSource(new BeanItemContainer<>(String.class, as.stream().map(A::getIdent).collect(Collectors.toList()))); 
for (A each : as) { 
    theBox.setItemCaption(a.getId(), a.getName()); 
} 
} 

vor zu rufen, aber wenn das Raster bearbeiten, die theBox zeigt noch die alten Werte.

Ich versuchte grid.getColumn("id").getEditorField().markAsDirty(), zu nennen, aber auch keine Änderung

Was ich vermisse?

+0

Ihre Konverter Methode 'convertToModel' macht keinen Sinn, denke ich. Es wird beim Schreiben in die Spalte "id" aufgerufen. Es sollte die 'A.getName()' zurück auf das Modell abbilden. Dies sollte jedoch nicht das Verhalten, das Ihr Problem ist, beeinflussen. Vielleicht hast du einen Tippfehler. Sie legen die Container-Datenquelle auf 'teamBox' anstelle von' theBox' fest? –

+0

Über 'convertToModel' - es scheint ohne etwas dort zu funktionieren und es scheint auch überhaupt nicht aufgerufen zu werden (?). Und ja, da war ein Tippfehler. 'theBox' ist die' Combobox' und auf dieser aktualisiere ich die Items. –

+0

Beim Hinzufügen von 'theBox.getContainerDataSource(). GetItemIds(). ForEach (System.out :: println);' in der Update-Methode habe ich, dass 'theBox' die richtigen Objekte hat, nur die UI nicht aktualisiert werden –

Antwort

0

Ich habe eine Antwort gefunden.

Meine Update-Methode sah aus wie dieses

public void update() { 
    updateCombobox(); 
} 

Jetzt sieht es so

public void update() { 
    createCombobox(); // this creates a new reference to theBox 
    setComboboxAsEditor(); 
} 

Also, ich neue Instanz von theBox erstellen und mit den Daten in updateCombobox füllen, dann ist diese Einstellung als ein neues Editorfeld für die Spalte.

Nicht sicher über die Richtigkeit davon, aber es funktioniert