Vaadin 时钟时间; } /** *@返回时间 */ 公共长getNanoTime(){ 返回此.nanoTime; } /** *@返回uuid */ 公共UUID getUuid(){ 返回此.uuid; } }

Vaadin 时钟时间; } /** *@返回时间 */ 公共长getNanoTime(){ 返回此.nanoTime; } /** *@返回uuid */ 公共UUID getUuid(){ 返回此.uuid; } },vaadin,Vaadin,该表通过侦听器监视表项的属性。如果通过表的项实例更改项的属性,则会通知并更新表:例如 container.getItem(beanInstance).getItemProperty(“propertyName”).setValue(“newValue”) 但是,如果bean在item实例之外更改,则需要通知表刷新。最简单的方法(使用stock BeanContainer)是简单地删除然后添加项目 或者,我建议您最好创建一个触发ItemSetChange事件的BeanItemContainer扩展

该表通过侦听器监视表项的属性。如果通过表的项实例更改项的属性,则会通知并更新表:例如

container.getItem(beanInstance).getItemProperty(“propertyName”).setValue(“newValue”)

但是,如果bean在item实例之外更改,则需要通知表刷新。最简单的方法(使用stock BeanContainer)是简单地删除然后添加项目

或者,我建议您最好创建一个触发ItemSetChange事件的BeanItemContainer扩展,该事件将导致表刷新

public class RefreshableBeanItemContainer<BEANTYPE> extends BeanItemContainer<BEANTYPE> {
  public RefreshableBeanItemContainer(Collection<? extends BEANTYPE> collection) throws IllegalArgumentException {
    super(collection);
  }

  public RefreshableBeanItemContainer(Class<? super BEANTYPE> type) throws IllegalArgumentException {
    super(type);
  }

  public RefreshableBeanItemContainer(Class<? super BEANTYPE> type, Collection<? extends BEANTYPE> collection) throws IllegalArgumentException {
    super(type, collection);
  }

  public void refreshItems(){
    fireItemSetChange();
  }
}
公共类RefreshableBeanItemContainer扩展了BeanItemContainer{

public RefreshableBeanItemContainer(Collection解决方案似乎与调用
refreshRowCache()一样简单
在表上-至少对我来说!

创建BeanItemContainer子类的好处是什么?我们仍然需要调用您的
refreshItems
方法,所以为什么不直接调用
fireItemSetChange
?无论哪种方式,我们更新数据的代码都必须进行额外的方法调用。在编写时,我肯定遗漏了什么ng,
fireItemSetChange()
受到保护,因此调用该方法的唯一方法是通过子类。这可能已经改变了。@BasilBourque当前(v7.3.8),该方法受保护=>调用该方法的唯一方法是通过子类。