gpt4 book ai didi

java - Vaadin 8.5.1-行更新后刷新网格

转载 作者:行者123 更新时间:2023-11-29 07:26:24 25 4
gpt4 key购买 nike

我正在使用 Vaadin 8.5.1 Grid 来显示 1000 行。一旦一行更新了它的属性更改,我就使用grid.getDataProvider().refreshItem(selectedRow)或者grid.getDataProvider().refreshAll() 更新行失败。

我需要执行显式 grid.setItems() 来查看行的更新属性。

我正在使用下面的代码片段创建一个网格

    msgGrid = new ABSMsgGrid();

List<ConsoleEntry> messageEntryList = new ArrayList<>();
if (inputConsole != null) {
messageEntryList.addAll(inputConsole.getMessageEntryList());
}

msgGridDataProvider = new ListDataProvider<ConsoleEntry>(messageEntryList) {

@Override
public Object getId(ConsoleEntry item) {
return item.getId();
}
};

msgGrid.setDataProvider(msgGridDataProvider);



//on changing property of the grid row, i use the below snippet
private void handleHideRowMenuItem(GridContextMenu<ConsoleEntry> contextMenu, ConsoleEntry selectedConsoleItem) {
if (!selectedConsoleItem.isHidden()) {
hideRowMenuItem = contextMenu.addItem("Hide Row", VaadinIcons.EYE_SLASH, selectedMenuItem -> {
selectedConsoleItem.hide();
**msgGridDataProvider.refreshItem(selectedConsoleItem);**
}
});
}
}

public class ConsoleEntry {

@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if (obj instanceof ConsoleEntry) {
ConsoleEntry temp = (ConsoleEntry) obj;
String msgRef2 = temp.getMsgRef();
return this.getMsgRef().equalsIgnoreCase(msgRef2);
}
return false;
}

@Override
public int hashCode() {
// TODO Auto-generated method stub
return super.hashCode();
}

public String getId(){
return this.getMsgRef();
}
}

我见过类似的问题,但没有一个解决方案有效。

How to refresh the vaadin Grid after you change something?

Vaadin - Refresh grid after row modification

感谢是否有人可以分享有关如何解决此问题的指示

TIA

最佳答案

要使一个项目被视为同一项目(以及刷新工作),您需要正确实现 equals()hashCode()对象上的方法。

来自文档

public void refreshItem(T​ item)

Description copied from interface: DataProvider

Refreshes the given item. This method should be used to inform all DataProviderListeners that an item has been updated or replaced with a new instance.

For this to work properly, the item must either implement

equals(​Object) and #hashCode() to consider both the old and the new item instances to be equal, or alternatively

DataProvider.​getId(​Object) should be implemented to return an appropriate identifier.

除此之外,您还应该创建一个 ListDataProvider ,将其分配给网格,然后通过先前分配的相同实例进行更新 ListDataProvider

关于java - Vaadin 8.5.1-行更新后刷新网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51871370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com