Я пытаюсь установить поле с индексом 0 в поле со списком Vaadin в значение по умолчанию, поэтому я мог бы избежать сообщения об ошибке, если пользователь ничего не выбрал. Поэтому я хотел бы, что вместо того, чтобы пустое поле я населенную поле с индексом 0.Vaadin не может получить значение поля combo box в 0 позиции
Я попытался установить его и это удалось с этим:
field.setNullSelectionAllowed(true);
field.setNullSelectionItemId(container.getIdByIndex(0));
Так что я не пустое значение в индексе 0, вместо этого мое предыдущее значение индекса 1 теперь находится в индексе 0. И это именно то, что я хочу и нужно, и в поле со списком выглядит так, как я хочу.
Но, к сожалению, когда я отправляю свою форму, значение не передается. Передаются только значения после индекса 0. Это так расстраивает, может кто-нибудь мне помочь? Значение, переданное setNullSelectionItemId, существует 100%.
Как я могу получить значение из индекса в месте 0 в поле со списком?
p.s. Вот мой код:
public Field<?> buildAndBindComboBox(final String caption, final BeanItemContainer<?> container,
final Object propertyId, final String title, final ValueChangeListener listener, final boolean nullAllowed,
final boolean required, final boolean enabled, final boolean visible) {
@SuppressWarnings("serial")
ComboBox field = new ComboBox(caption, container) {
// http://dev.vaadin.com/ticket/10544
// - typing in ComboBox causes Internal Error
private boolean inFilterMode;
@Override
public void containerItemSetChange(com.vaadin.data.Container.ItemSetChangeEvent event) {
if (inFilterMode) {
super.containerItemSetChange(event);
}
}
@Override
protected List<?> getOptionsWithFilter(boolean needNullSelectOption) {
try {
inFilterMode = true;
return super.getOptionsWithFilter(needNullSelectOption);
} finally {
inFilterMode = false;
}
}
};
field.setStyleName("comboBox");
field.setInputPrompt("Select");
if(defaultValue == true){
field.setNullSelectionAllowed(false);
field.setNullSelectionItemId(container.getIdByIndex(0).toString());
//field.select(container.getIdByIndex(0));
//field.setValue(container.getIdByIndex(0));
//field.setRequired(false);
defaultValue = false;
} else {
field.setNullSelectionAllowed(nullAllowed);
field.setRequired(required);
}
field.setImmediate(true);
field.setNewItemsAllowed(false);
field.setFilteringMode(FilteringMode.CONTAINS);
if (title != null) {
field.setItemCaptionPropertyId(title);
}
//field.setNullSelectionAllowed(nullAllowed);
//field.setRequired(required);
field.setVisible(visible);
if (listener != null) {
field.addValueChangeListener(listener);
}
this.bind(field, propertyId);
field.setEnabled(enabled);
return field;
}
public void setDefaultValueFirstItem(boolean def){
defaultValue = def;
}
Он переплетены так:
commitmentFeeBinder.setDefaultValueFirstItem(true);
commitmentFeeBinder.buildAndBindComboBox("No working day labels", noWorkingDays, "noWorkingDaysCF", "title", null, false, !transaCF, true, !transaCF);
Какие предметы у вас есть в вашем ком поле? В vaadin вы обычно не работаете с индексами, а напрямую с объектами –
Вы можете отключить нулевой выбор и изначально выбрать элемент в индексе 0 через setValue из поля со списком. –
Штеффен Харбич уже пробовал это, не работает. Я пробовал с select(), setValue(), различные комбинации - ничего не работает. Андре, у меня есть другое поле со списком и текстовое поле и ни одно комбинированное поле, кроме этого должно быть выбрано значение по умолчанию. Кажется, я должен иметь пустое значение и выбирать его, или он не сработает. Не могу поверить, что получить эти простые данные в Ваадине так сложно. – DarioBB