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