Vaadin,表生成列值

时间:2015-11-16 10:40:20

标签: vaadin

我使用表组件并为optiongroup生成列。

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只获取原始值,而不是更改值。

1 个答案:

答案 0 :(得分:1)

您必须向OptionGroup添加ValueChangeListener,并且在侦听器内部实际使用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());
    } 
});