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?
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? –
Ü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. –
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 –