1

我在理解该commit()方法在 Vaadin 中的真正作用时遇到了一些问题。我阅读了文档,做了一些示例,但我误解了它的实际含义。

这是代码片段:

if (source == save) {
     /* If the given input is not valid there is no point in continuing */
    if (!isValid()) {
        return;
    }

    if (newContactMode) {
         /* We need to add the new person to the container */
        Item addedItem = app.getDataSource().addItem(newPerson);
         /*
          * We must update the form to use the Item from our datasource
          * as we are now in edit mode
          */
        setItemDataSource(addedItem);
        //System.out.println(app.getDataSource().getItem(addedItem));
        newContactMode = false;
    }

    commit();
    setReadOnly(true);
}

如果我这样做,那么我不会添加一些添加到 DataSource 的 Form 中的数据(在 Container 中)。这些条目未显示在表格中。

另一段代码:

if (source == save) {
     /* If the given input is not valid there is no point in continuing */
    if (!isValid()) {
        return;
    }
    commit();//changing place of this method
    if (newContactMode) {
         /* We need to add the new person to the container */
        Item addedItem = app.getDataSource().addItem(newPerson);
         /*
          * We must update the form to use the Item from our datasource
          * as we are now in edit mode
          */
        setItemDataSource(addedItem);
        //System.out.println(app.getDataSource().getItem(addedItem));
        newContactMode = false;
    }
    setReadOnly(true);
}

这个版本可以正常工作。我可以得出结论,表单中的此方法会阻止与此表单的“数据源”(与数据源中的项目)的所有交互。但我需要直接通过调用另一个类和 Container 的addItem(). 我还没有找到关于commit()方法的任何好的解释。

我一直在使用这个教程,也许有人会从教程中认出这个 GUI。

图形用户界面

4

1 回答 1

0

我明白出了什么问题。在第二个片段中,我通过调用 commit() 使用表单中的数据填写了我的 newPerson 实例。在第一个片段中,我写了空数据,因为我之前没有调用方法 commit() 并且绑定对象为空(尚未编写)。

于 2016-08-24T08:53:48.847 回答