如何在Vaadin中接收更改字段的输入?

时间:2011-10-21 11:45:27

标签: scala containers vaadin edit

我的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 个答案:

答案 0 :(得分:3)

Vaadin没有跟踪容器中的修改项目。您必须跟踪bean中的修改(Person)。为所有可编辑属性定义setter,如果有变化,则设置修改后的标志。在保存按钮侦听器中,您可以过滤掉所有已修改的项目。