user3567657
user3567657

Reputation: 101

Vaadin, Table generated column value

I use table component and generate column for optiongroup.

enter image description here

when change optionGroup's value, and click the save button, the table get the before value - not changed value..

How to get the chaged value ? Not origin value.

here code...


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 gets only origin value , not changes value.

Upvotes: 0

Views: 691

Answers (1)

JDC
JDC

Reputation: 4385

You have to add a ValueChangeListener to the OptionGroup and inside the listener actually set the value on your MyType view using something like view.setValue(...).

Your code would then look something like that:

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

    @Override 
    public void valueChange (Property.ValueChangeEvent event){ 
        view.setValue(event.getProperty().getValue());
    } 
});

Upvotes: 1

Related Questions