Vaadin如何处理特定Item或PropertyId的IndexedContainer.Property.ValueChangeEvent?

时间:2014-10-14 10:54:57

标签: containers vaadin valuechangelistener getproperty

我希望在特定行中更改值时,在IndexedContainer中处理Property.ValueChangeEvent。我期待"事件"作为参数传递将提供已更改的信息。

IndexedContainer container = new IndexedContainer();
.
. add container properties, insert items ...
.
container.addValueChangeListener(this)
.
.
public void valueChange(ValueChangeEvent event) {
  // How to get itemId and another properties from the same item?
  event.getProperty(); // This returns only whole container
}

getProperty()函数没有给我提供信息,来自哪个行和列。谢谢你的帮助。

JH

2 个答案:

答案 0 :(得分:1)

通常在组件中使用容器,并且该组件是侦听“valueChange”的组件。 获取所选项目的方法是:

Item itemSelected = component.getContainerDataSource().getItem(component.getValue());
//get for example "id" property
Integer id = (Integer) itemSelected.getItemProperty("id").getValue();

否则,你只是单独使用一个容器吗?如果是这样,你可以更具体一点吗?因为它不是一种“标准”的方式。 此致

答案 1 :(得分:0)

效率不高,但有效:

container.addValueChangeListener(new ValueChangeListener() {
    private static final long serialVersionUID = 1L;

    @Override
    public void valueChange(ValueChangeEvent event) {
        for (Object itemId : container.getItemIds()) {
            for (Object propId : container.getContainerPropertyIds()) {
                Property<?> p = container.getContainerProperty(itemId, propId);
                Object o = ((EventObject) event).getSource();
                if (p.equals(o)) {
                    System.out.println("itemId: " + itemId);
                    System.out.println("propertyId: " + propId);
                    return;
                }
            }
        }
    }
});

eventPropertyValueChangeEventgetSource()方法返回IndexedContainerProperty。 问题是那些是private类。 IndexedContainerProperty也包含itemIdpropertyId