gpt4 book ai didi

java - 在网格对象中选择后,getItem() 使用 SQLContainer 返回 null,但该行存在

转载 作者:行者123 更新时间:2023-11-29 20:37:39 25 4
gpt4 key购买 nike

有人可以告诉我我做错了什么吗?我只想从 SQLContainer 中选择一个项目,该项目使用 Vaadin 显示为网格对象。我基本上想用所选项目的内容填写表单,以便我可以在保存项目之前对其进行编辑(标准 CRUD)。

构建模块:

        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 访问,我将其绑定(bind)到网格对象。

SQLContainer assetContainer = db.getAssetContainer();
grid.setContainerDataSource(assetContainer);

现在,我尝试使用以下代码片段填写表单

    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 函数时,就会出现问题。我总是得到空值。我也尝试过 assetContainer.getItem(selected) 。如果我通过调试器运行它,我确实会在所选集中看到 rowId(相当于 a.Id)。如果我将 assetContainer 打印到屏幕上,我还会看到内容,并且可以看到我希望选择的项目,但结果始终为空。我使用了错误的功能吗? FreeformQuery 中的主键是否有问题?我用MYSQL设计了这个表,在asset和assettype表中有两个名为id的主键(当然,我希望asset.id是这个查询的主键,而不是assettype.id)。

提前非常感谢

最佳答案

最终比我预期的要容易(在花了几乎一天的时间尝试之后)。

    grid.addSelectionListener(event -> {
if (event.getSelected().isEmpty()) {
form.setVisible(false);
} else {
Item item = assetContainer.getItem(event.getSelected().iterator().next());
form.setCustomer(item);
}
});

关于java - 在网格对象中选择后,getItem() 使用 SQLContainer 返回 null,但该行存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38723444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com