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

标签 java vaadin vaadin7

我尝试在 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/

相关文章:

vaadin - 如何检测 Vaadin FileDownloader 何时成功或失败

java - 如何从 vaadin 7 中的流打印 pdf 文件?

java - 我如何知道 Vaadin 7.x 中首次创建 session 的时间?

java - Solr 4.0 和资源加载器 : getLines undefined

java - 使用 SimpleDateFormat

java.net.bindexception地址已经在多台tomcat上运行

Vaadin - 如何限制组件的柔软度和重叠?

java - VAADIN 在生产模式下找不到主题

java - 从 Singleton 调用 Vaadin 组件上的 bean 方法

java - 多对多删除集 NULL