gpt4 book ai didi

java - 无法使用 Vaadin 将文本字段从 SQLContainer 链接到 RowItem

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

我正在构建一个简单的 CRUD 应用程序,以 MySql 数据库作为后端。到目前为止,我设法使用 FreeformQuery 将网格链接到 SQLContainer 的内容(因此读取没问题)。

    String query = "select a.id, a.name name, b.name type from asset a join " +
" assettype b on a.assettype_id = b.id";

grid.setContainerDataSource(container);

对于容器SQLContainer。我创建了一个表单,并在其内容和所选行之间进行了绑定(bind)

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

因此,如您所见,表单链接到一个项目。 setAsset 只是一个表单方法,它将行内容链接到表单的文本字段。

public void setAsset(Item item) {
this.item = item;
FieldGroup binder = new FieldGroup(this.item);
binder.bind(textField1, "name");
binder.bind(textField2, "type");
setVisible(true);
}

嗯,我不知道如何添加一行,或者如何编辑现有行。为了编辑一行,我尝试使用表单的保存方法(我用按钮调用),如下所示

private void save() throws UnsupportedOperationException, SQLException  {
SQLContainer container = db.getContainer();
container.addItem(item);
container.commit();
}

嗯,问题一是,如果我选择一个网格项,我会在文本字段中看到名称和类型的内容,但是,如果我在进入保存方法之前修改文本字段中的值, this.item 仍然具有原始值(当我认为它会在文本字段中采用新值时,因为文本字段绑定(bind)到 RowItem)。有人知道这是怎么回事吗?

此外,如果我想创建一个新行,我想要这样的东西

    Button createAsset = new Button("Add asset");
createAsset.addClickListener(e ->
{
grid.select(null);
form.setAsset(new Item());
});

并填写表单中空白 Item() 的内容,然后将其推送到表中。我当然不能,因为 Item 和 RowItem 是接口(interface)。那么如何在填充容器的内容之前实例化容器的空行呢?

提前非常感谢。

最佳答案

最后,我想说要么是我没有正确使用 FieldGroup.bind 方法,要么是其中存在错误。这是我的原创内容

public void setAsset(Item item) {
this.item = item;
FieldGroup binder = new FieldGroup(this.item);
binder.bind(textField1, "name");
binder.bind(textField2, "type");
setVisible(true);
}

这不起作用,这就是有效的(对我来说,是一样的)

public void setAsset(Item item) {
this.item = item;
textField1.setPropertyDataSource(item.getItemProperty("name"));
textField2.setPropertyDataSource(item.getItemProperty("type"));
setVisible(true);
}

关于java - 无法使用 Vaadin 将文本字段从 SQLContainer 链接到 RowItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38761049/

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