2017-06-19 30 views
-1

我有一個TwinColSelect我試圖通過代碼從值中選擇,但它永遠不會。無法在TwinColSelect中設置值

List<Role> list = new RoleJpaController(DataBaseManager.getEntityManagerFactory()).findRoleEntities(); 
BeanItemContainer<Role> roleContainer = new BeanItemContainer<>(Role.class, list); 
TwinColSelect roles = new TwinColSelect(TRANSLATOR.translate("general.role")); 

roles.setContainerDataSource(roleContainer); 
roles.setRows(5); 
roles.setLeftColumnCaption(TRANSLATOR.translate("available.roles")); 
roles.setRightColumnCaption(TRANSLATOR.translate("current.roles")); 
roles.setImmediate(true); 

list.forEach(r -> { 
    roles.setItemCaption(r, TRANSLATOR.translate(r.getDescription())); 
}); 

if (user.getUserHasRoleList() != null) { 
    Set<Role> rs = new HashSet<>(); 
    user.getUserHasRoleList().forEach(uhr -> { 
     if (uhr.getProjectId() == null) { 
      LOG.log(Level.INFO, "Selecting role: {0}", uhr.getRole()); 
      rs.add(uhr.getRole()); 
     } 
    }); 
    roles.setValue(rs); 
} 

我通過調試確認選擇角色的邏輯被執行。

有什麼想法?

+0

一種可能性是有兩個不同的'Role'實例:1來自'findRoleEntities()',另一個來自'user.getUserHasRoleList().forEach(...)'。你是否擁有'Role'實現的所有權,還是第三方實現(例如:Spring)?如果是你的,那麼equals()和hashCode()是如何實現的? – Morfic

+0

我通過調試進行檢查,他們指向相同的角色。用戶角色關係是多對多的。等於只是看看ID是相同的。與hashCode一樣。 – javydreamercsw

+0

然後它應該沒問題。你能提供[sscce](http://sscce.org)來重現你的問題嗎?沒有數據庫,沒有敏感數據,只有基本的類和一些假的數據,以獲得與描述中相同的行爲。 – Morfic

回答

0

問題是Role類的equals方法中的一個錯誤。修復後它工作正常。