2015-11-12 38 views
0

我使用Viritin MultiSelectTable來顯示JPA實體。實體顯示正確,但是當我點擊一行時,所有行都被選中。Vaadin Viritin MultiSelectTable選擇無法正常工作

我初始化我的表如下:

MultiSelectTable<MyEntity> acFiles = new MultiSelectTable<MyEntity>().withProperties(
     "filedate", 
     "filesize", 
     "rows", 
     "filename" 
); 

acFiles.setOptions(myDAO.findAll()); 

acFiles.addListener(((Listener) event -> { 
    System.out.println("Clicked Row"); 
})); 

我在做什麼錯,讓所有選擇行每次我點擊?

回答

0

症狀聽起來像是你在某種程度上實現了你的MyEntity類中的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; 
} 

的「最佳方式」取決於你如何使用的標識符。

+0

那實際上是錯誤! – Tobson