gpt4 book ai didi

java - 如何更新 Vaadin 网格上的项目而不显式放置所有字段?

转载 作者:行者123 更新时间:2023-11-30 08:11:20 32 4
gpt4 key购买 nike

我尝试在 Grid 表上为 User 实体创建常规 CRUD 操作 - 如下所示:

public class User {
private id;
private String name
private Role role;
}

具有适当的 getter 和 setter。

  • Grid 应有 2 个字段:namerole.name

  • 我想为该Grid创建一个数据IndexedContainer

  • 我想进行更新 - 这会将容器的数据绑定(bind)到 User 模型。

    • 我所说的模型是指User实体,而不是Vaadin的内部模型

我怎样才能做到这一点?我有两件事有问题:

  • 创建适当的监听器
  • 将现有的User模型绑定(bind)到数据IndexedContainer中的行/索引

说明:

  • IndexedContainer 具有 itemId 属性,我可以在其中保留用户的 ID 以供将来更新时绑定(bind)。但是在 IndexedContainer 上创建 ValueChangeListener 后,我发现我无法访问其 itemId 字段。

  • 所以我尝试在 EditorFieldGroup (Grid 对象的字段)中使用 CommitHandler ,并且存在相同的情况,但我请参阅 debug made 中的 itemId 属性,但我无法访问它,因为它是私有(private)字段。我当然可以通过反射(reflection)来获得它 - 但我不认为这是一个好方法。

也许还有其他方法可以从Grid表格数据更新User模型?

也许我应该将User id 字段作为常规IndexedContainer 属性添加到网格中,但使其隐藏且只读?但我想知道它是否安全,并且不存在有人更改前端表单并可以使用 Grid 表上未显示的 id 更新 User 的威胁。

如果有人知道该典型案例的最佳实践是什么,请告诉我。我将非常高兴您的帮助!

最佳答案

使用可编辑网格组件时,您将需要使用FieldGroup。在您的情况下,您可以使用 BeanFieldGroup。如果您有正确的 getter/setter 方法,BeanFieldGroup 可以在用户更改并保存网格中的数据时负责更新您的实体实例。以下是一个小代码片段:

grid.setEditorFieldGroup(
new BeanFieldGroup<Person>(User.class));

此外,您可以使用标准 @NotNull@Size@Min 为您的 User 实体添加验证>、@Max

有关更多信息,请查看 vaadin 网站的书籍。希望这有帮助!

关于java - 如何更新 Vaadin 网格上的项目而不显式放置所有字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30350801/

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