使用EvenProvider的Vaadin日历不会刷新更改数据

时间:2015-11-12 10:21:47

标签: vaadin vaadin7

我正在使用带有EventProvider的Vaadin Calendar组件。它在初始显示时正确加载项目,但是当我编辑日历项目时,它会反映屏幕上的更改。 (标题名称更改或日期更改)我甚至尝试在更新cal.setEventProvider(p)后再次设置提供程序;但它并不强制日历从提供程序获取新数据。任何提示如何使用EventProvider并在日历上进行条目更新?

1 个答案:

答案 0 :(得分:0)

我有一个非常类似的问题(Vaadin 7.1),并发现default implementation of ContainerEventProvider不能正常工作。我不记得所有细节,但我的调查显示getEvents方法存在问题。为了解决这个问题,我将ContainerEventProvider与我自己的类子类化,并实现了getEvents的覆盖:

@Override
public List<CalendarEvent> getEvents(Date startDate, Date endDate) {
    eventCache.clear();

    // int[] rangeIndexes = getFirstAndLastEventIndex(startDate, endDate);
    for (int i = 0; i < container.size(); i++) {
        eventCache.add(getEvent(i));
    }
    return Collections.unmodifiableList(eventCache);
}

这是将容器分配给日历的功能:

public void setCalendarContainerDataSource(Indexed ds) {
    // this.vaadinCal.setContainerDataSource(ds); // this did't work
    MyCalendarContainerEventProvider provider = new MyCalendarContainerEventProvider(ds);
    provider.addEventSetChangeListener(new CalendarEventProvider.EventSetChangeListener() {

        public void eventSetChange(EventSetChangeEvent changeEvent) {
            vaadinCal.markAsDirty();
        }
    });
    provider.addEventChangeListener(new EventChangeListener() {

        public void eventChange(EventChangeEvent changeEvent) {
            // Repaint if event changes
            vaadinCal.markAsDirty();
        }
    });
    vaadinCal.setEventProvider(provider);
}