2015-11-16 8 views
0

Я использую компонент таблицы и создаю столбец для группы options.Vaadin, значение столбца, генерируемое таблицей

enter image description here

при изменении optionGroup's значение и нажмите кнопку Сохранить, таблица получить до значения - не изменилось значение ..

Как получить chaged значение? Не исходное значение.

здесь код ...


public class MyTypeColumnGenerator implements ColumnGenerator{ 

    public Object generateCell(Table source, Object itemId, Object columnId) { 
     BeanItem<MyType> beanItem = (BeanItem<MyType>)source.getItem(itemId); 
     MyType view = beanItem.getBean() ; 

     if(view.getValueType().equals(ValueType.Flag)){ 
       // radio 
       OptionGroup opt = new OptionGroup() ;   
       opt.addItem(1) ; // y 
       opt.addItem(0) ; // n 

       opt.setItemCaption(1, Messages.getString(Messages.Opt_Y)); 
       opt.setItemCaption(0, Messages.getString(Messages.Opt_N)); 

       opt.setStyleName("horizontal"); 

       if(view.getFactorValue() == 0){ 
        opt.select(0); 
       }else if(view.getFactorValue() == 1){ 
        opt.select(1); 
       } 

       return opt ; 

      }else{ 
       Label label = new Label(); 
       label.setValue("N/A"); 
       return label; 
      } 

    } 
} 

btnSave.addClickListener(new ClickListener() { 

      /** 
      * 
      */ 
      private static final long serialVersionUID = 1L; 

      @Override 
      public void buttonClick(ClickEvent event) { 

       Collection<?> items = table.getItemIds() ; 

       for (Object item : items) { 
        Property pName = table.getContainerProperty(item, "name"); 
        Property pVal = table.getContainerProperty(item, "value"); 
} 

pVal получает только происхождение, значение не изменяется значение.

ответ

0

Вы должны добавить ValueChangeListener к OptionGroup и внутри слушателя фактически установить значение на вашем MyType view, используя что-то вроде view.setValue(...).

Ваш код будет выглядеть примерно так:

OptionGroup opt = new OptionGroup() ; 
opt.addValueChangeListener(new Property.ValueChangeListener() { 

    @Override 
    public void valueChange (Property.ValueChangeEvent event){ 
     view.setValue(event.getProperty().getValue()); 
    } 
}); 
Смежные вопросы