誰かが間違っていることを教えてもらえますか? Vaadinを使ってグリッドオブジェクトとして表示されているSQLContainerからアイテムを選択したいだけです。基本的には、選択したアイテムの内容をフォームに入力して、アイテムを保存する前に編集することができます(標準CRUD)。getItem()はグリッドオブジェクトの選択後にSQLContainerでnullを返しますが、その行は存在します
ビルディングブロック:
String q4text = "select a.name, aty.name "
+ "from asset a "
+ "join assettype aty on a.assettype_id = aty.id";
FreeformQuery q4 = new FreeformQuery(q4text, connectionPool, "a.id");
q4.setDelegate(new AssetQueryDelegate());
assetContainer = new SQLContainer(q4);
これはFreeformQueryと私のSQLContainerです。スニペットでは、 "a.id"がプライマリキーとして表示されます。私は過去に "id"と "ID"を試しました。結果は同じです。このコンテナはDatabaseHelperからアクセスでき、グリッドオブジェクトにバインドします。今
SQLContainer assetContainer = db.getAssetContainer();
grid.setContainerDataSource(assetContainer);
、私は、Webアプリケーションを実行すると、私はグリッドの内容を見ることができると私は並べ替えることができ、次のコードスニペット
grid.addSelectionListener(event -> {
if (event.getSelected().isEmpty()) {
form.setVisible(false);
} else {
Set<Object> selected = event.getSelected();
Item item = assetContainer.getItem(new Object[] {selected});
form.setCustomer(item);
}
});
でフォームに記入してみてください。問題は、行を選択してgetItem関数を呼び出すときに発生します。私はいつもnullになる。私は、assetContainer.getItem(選択されている)で試してみました。デバッガを介して実行すると、実際には選択されたセット内のrowId(a.Idに相当)が表示されます。 assetContainerを画面に印刷すると、内容も表示され、選択すると予想される項目が表示されますが、結果は常にnullです。間違った機能を使用していますか? FreeformQueryの主キーに問題はありますか?私はMYSQLを使ってテーブルを設計しましたが、アセットとアセットタイプテーブルにidという名前の2つのプライマリキーがあります(もちろん、asset.idをassettype.idではなく、このクエリのプライマリキーにします)。最終的には非常に多く、事前
です。 getItem()は、ItemIdをパラメータとみなします。前にItemIdのセットを転送しました;) – d2k2