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 のフォーム (コンテナー内) に追加されたデータの一部は追加されません。これらのエントリは表に表示されていません。

コードの別のスニペット:

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);
}

このバージョンは正常に動作します。フォーム内のこのメソッドは、このフォームの "DataSource" (DataSource 内の項目) とのすべての対話をブロックすると結論付けることができます。しかし、別のクラスとコンテナのaddItem(). commit()メソッドについての適切な説明は見つかりませんでした。

私はこのチュートリアルを使用しています。チュートリアルからこの GUI を認識する人がいるかもしれません。

GUI

4

1 に答える 1

0

何が悪いのか理解しました。2 番目のスニペットでは、commit() を呼び出して、フォームからのデータを newPerson インスタンスに入力しました。最初のスニペットでは、以前にメソッド commit() を呼び出さず、バインディング オブジェクトが null (まだ書き込まれていない) であるため、null データを書き込みました。

于 2016-08-24T08:53:48.847 に答える