Как я могу получить входные данные измененных полей в Vaadin?

#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 ). Определите параметры настройки для всех редактируемых свойств и установите измененный флаг, если что-то изменится. В прослушивателе кнопки сохранения вы можете отфильтровать все измененные элементы.