我们正在更新我们的 Grid 表单以使用 LitTemplates 进行渲染。但是,即使状态的基础数据已更新,我们也遇到了复选框状态未更新的问题。以下代码演示了该问题:
HorizontalLayout hlTest = new HorizontalLayout();
List<String> selected = new ArrayList<>();
Grid<String> testGrid =new Grid<>();
testGrid.setWidth("250px");
testGrid.setHeight("250px");
List<String> dataList = new ArrayList<>(List.of("AAAAA", "BBBBB", "CCCCC", "DDDDD", "EEEEE"));
ListDataProvider<String> dataProvider = new ListDataProvider<>(dataList);
testGrid.setItems(dataProvider);
String template = """
<vaadin-checkbox @click="${handleCheckClick}" ?checked="${item.rowSelected}"></vaadin-checkbox>
<div>${item.text}</div>
""";
LitRenderer<String> lit = LitRenderer.of(template);
lit.withProperty("rowSelected", item -> {
boolean rc = selected.contains(item);
System.out.println("Item selected: " + item + " => " + rc);
return rc;
});
lit.withProperty("text",item -> item);
lit.withFunction("handleCheckClick", (item) -> {
if(selected.contains(item))
selected.remove(item);
else
selected.add(item);
});
testGrid.addColumn(lit);
Button bSelect = new Button("Select");
bSelect.addClickListener(buttonClickEvent -> {
if(selected.size() > 0)
{
dataList.clear();
dataList.addAll(selected);
selected.clear();
dataProvider.refreshAll();
}
});
hlTest.add(testGrid, bSelect);
使用给定的网格,单击几个复选框,然后单击“选择”。列表减少为选定的行,但即使“选定”为空,复选框仍处于选中状态。“rowSelected”中的日志记录正确地返回了状态。
如果我删除列并重新添加到网格,那么所有内容都会正确显示。此外,如果我选择网格中的所有项目,那么选择也可以正常工作。
目前使用 Java17 和 Vaadin 22.0.6(也尝试过 23.0.0 beta3)。
谢谢。