2016-04-29 1 views
0

Я пытаюсь установить поле с индексом 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); 
+0

Какие предметы у вас есть в вашем ком поле? В vaadin вы обычно не работаете с индексами, а напрямую с объектами –

+0

Вы можете отключить нулевой выбор и изначально выбрать элемент в индексе 0 через setValue из поля со списком. –

+0

Штеффен Харбич уже пробовал это, не работает. Я пробовал с select(), setValue(), различные комбинации - ничего не работает. Андре, у меня есть другое поле со списком и текстовое поле и ни одно комбинированное поле, кроме этого должно быть выбрано значение по умолчанию. Кажется, я должен иметь пустое значение и выбирать его, или он не сработает. Не могу поверить, что получить эти простые данные в Ваадине так сложно. – DarioBB

ответ

1

Если я понял ваш вопрос правильно, Штеффен Harbich правильно, предполагая, что если вы хотите, чтобы первый элемент должен быть выбран по умолчанию вы должны отключить нулевой выбор и выбрать первый элемент по умолчанию. Например. это работает:

ComboBox cb = new ComboBox("", Arrays.asList("First", "Second", "Third")); 
cb.setNullSelectionAllowed(false); 
cb.select("First"); 

Или же с BeanItemContainer:

List<MyBean> beans = Arrays.asList(new MyBean("First"), new MyBean("Second"), new MyBean("Third")); 
BeanItemContainer<MyBean> bic = new BeanItemContainer<>(MyBean.class, beans); 
ComboBox cb = new ComboBox("", bic); 
cb.setNullSelectionAllowed(false); 
cb.select(bic.getIdByIndex(0)); 
0
private void resetComboBoxToIndex(ComboBox combo, int index) { 
    BeanItemContainer<Bean_ComboBox> items_combo = (BeanItemContainer<Bean_ComboBox>)combo.getContainerDataSource(); 
    if(items_combo != null && items_combo.size() > index) { 
     Bean_ComboBox primerItem = items_combo.getIdByIndex(index); 
     if(primerItem != null) { 
       combo.select(primerItem); 
     } 
    } 
} 
+0

Вместо того, чтобы просто выбросить код, вы также должны объяснить, в чем проблема и как вы его исправили. Это сделает ваш ответ более ценным для оригинального плаката, а также для будущих посетителей. – miken32

+0

OK. Я попробую. С помощью этого метода вы можете выбрать элемент списка со списком в указателе в качестве параметра. Считается combobox.selectedIndex (n) из Java Swing –