#scala #containers #vaadin #edit
#scala #контейнеры #vaadin #Редактировать
Вопрос:
Мое приложение Vaadin предоставляет небольшую таблицу, которую можно редактировать.
Если пользователь — после изменения некоторых полей — нажмет на кнопку сохранить, я получу все строки и сохраню измененные строки в базе данных.
// create a bean item container
val writers: BeanItemContainer[Person] = new BeanItemContainer[Person](classOf[Person])
// create some person objects
writers.addBean(new Person("Thomas", "Mann", 1929))
writers.addBean(new Person("W. B.", "Yeats", 1923))
writers.addBean(new Person("Günter", "Grass", 1999))
// create the table incl. the bean item container
val table: Table = new Table("Nobel Prize for Literature", writers)
// set some options for the table
table.setImmediate(true)
table.setEditable(true)
table.setValidationVisible(true)
// create the save button
val saveButton = new Button("save")
// create a table listener
saveButton.addListener(new Button.ClickListener() {
def buttonClick(event: com.vaadin.ui.Button#ClickEvent) {
table.commit()
val writerList = table.getItemIds.asInstanceOf[Collection[Person]].asScala.toList
//
// **THIS WILL NOT WORK**
//
// I received always the original rows, without the
// user input, but I needs the user input, the changed rows.
//
//
for (item <- writerList) {
println("firstName ====> " item.getFirstName)
println("lastName =====> " item.getLastName)
println("year==========> " item.getYear)
}
}
});
Как я могу получить измененные строки с пользовательским вводом? Необходимо ли реализовывать форму? Если да, то как я могу реализовать форму в этом случае?
Ответ №1:
Vaadin не отслеживает измененные элементы в контейнере. Вы должны отслеживать изменения в своих компонентах ( Person
). Определите параметры настройки для всех редактируемых свойств и установите измененный флаг, если что-то изменится. В прослушивателе кнопки сохранения вы можете отфильтровать все измененные элементы.