Vaadin Viritin MultiSelectTable 选择工作不正常
Vaadin Viritin MultiSelectTable selection is not working properly
我使用 Viritin MultiSelectTable 来显示 JPA 实体。实体显示正确,但当我单击一行时,所有行都被选中。
我初始化我的 table 如下:
MultiSelectTable<MyEntity> acFiles = new MultiSelectTable<MyEntity>().withProperties(
"filedate",
"filesize",
"rows",
"filename"
);
acFiles.setOptions(myDAO.findAll());
acFiles.addListener(((Listener) event -> {
System.out.println("Clicked Row");
}));
我哪里做错了,每次点击都选中所有行?
这些症状听起来像是您在 MyEntity class 中以某种方式错误地实施了 equals/hashCode 方法实施,并且 Vaadin 对您的所有对象都一视同仁。如果它是一个 JPA 实体,一个很好的工作策略是像这样实现它们:
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if(this.id == null) {
return false;
}
if (obj instanceof MyEntity && obj.getClass().equals(getClass())) {
return this.id.equals(((MyEntity) obj).id);
}
return false;
}
@Override
public int hashCode() {
int hash = 5;
hash = 43 * hash + Objects.hashCode(this.id);
return hash;
}
"perfect way" 取决于您如何使用标识符。
我使用 Viritin MultiSelectTable 来显示 JPA 实体。实体显示正确,但当我单击一行时,所有行都被选中。
我初始化我的 table 如下:
MultiSelectTable<MyEntity> acFiles = new MultiSelectTable<MyEntity>().withProperties(
"filedate",
"filesize",
"rows",
"filename"
);
acFiles.setOptions(myDAO.findAll());
acFiles.addListener(((Listener) event -> {
System.out.println("Clicked Row");
}));
我哪里做错了,每次点击都选中所有行?
这些症状听起来像是您在 MyEntity class 中以某种方式错误地实施了 equals/hashCode 方法实施,并且 Vaadin 对您的所有对象都一视同仁。如果它是一个 JPA 实体,一个很好的工作策略是像这样实现它们:
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if(this.id == null) {
return false;
}
if (obj instanceof MyEntity && obj.getClass().equals(getClass())) {
return this.id.equals(((MyEntity) obj).id);
}
return false;
}
@Override
public int hashCode() {
int hash = 5;
hash = 43 * hash + Objects.hashCode(this.id);
return hash;
}
"perfect way" 取决于您如何使用标识符。