Thursday, March 24, 2011

О вреде использования domain object в качестве ключей

В vaadin в таблице ключем в containerDataSource  можно использовать domain object и синхронизировать значения его полей с редакторами, к примеру, при нажатии на кнопку сохранить. Удобно получать все редакторы объекта по этому объекту. Особенно, если объект задать как data в редакторах.

table.addContainerProperty("description", TextArea.class, null, "Описание", null, null); 
table.addContainerProperty("operations", Button.class, null, "Операции", null, null); 
 

Button paste = new Button("Вставить"); 
paste.setStyleName(BaseTheme.BUTTON_LINK); 
paste.setData(description); //description - это domain object 
buttons.addComponent(paste); 
 
table.addItem(new Object[] {textField, paste}, description); 




Проблема в том, что если поменять значение поля, то hashCode у объекта соответственно изменится (мы же переопределили методы) и после этого найти редакторы объекта не представляется возможным (там внутри данные хранятся в Hashtable).