如何在不显式放置所有字段的情况下更新 Vaadin 网格上的项目?
How can I Update item on Vaadin's Grid without putting explicitly all fields on it?
我尝试在 Grid
table 上为 User
实体创建常规 CRUD 操作 - 就像这样:
public class User {
private id;
private String name
private Role role;
}
具有适当的 getter 和 setter。
Grid
应该有 2 个字段:name
和 role.name
。
我想为那个IndexedContainer
创建一个数据Grid
我想进行更新 - 这会将容器的数据绑定到 User
模型。
- 我指的模型是
User
实体,而不是 Vaadin 的内部模型
我该怎么做?我有两件事的问题:
- 创建合适的监听器
- 将现有
User
模型绑定到数据 IndexedContainer
中的 row/index
解释:
IndexedContainer
有 itemId
属性,我可以在其中留下用户 ID,以便将来在更新时绑定。但是在 IndexedContainer
上创建 ValueChangeListener
之后,我发现我无法访问它的 itemId
字段。
所以我在EditorFieldGroup
(Grid
对象的字段)中尝试使用CommitHandler
并且有相同的情况,但我看到itemId
属性 在调试中,但我无法访问它,因为它是一个私有字段。我当然可以通过反思得到它——但我认为这不是一个好的方法。
也许还有其他方法可以从 Grid
表格数据更新 User
模型?
也许我应该像往常一样将 User
id 字段添加到网格 IndexedContainer
属性,但将其设为隐藏和只读?但是我想知道它是否安全并且没有人改变前端形式并且可以使用未在 Grid
table.
上显示的 id 更新 User
的威胁
如果有人知道那个典型案例的最佳实践是什么,请告诉我。我会很高兴能得到你的帮助!
使用可编辑网格组件时,您需要使用 FieldGroup
。在您的情况下,您可以使用 BeanFieldGroup
。如果您有正确的 getter/setter 方法,那么 BeanFieldGroup
可以在用户更改和保存网格中的数据时负责更新您的实体实例。以下是一小段代码:
grid.setEditorFieldGroup(
new BeanFieldGroup<Person>(User.class));
此外,您可以使用标准 @NotNull
、@Size
、@Min
、@Max
等为 User
实体添加验证。
有关更多信息,请查看 vaadin 网站的书籍。希望这对您有所帮助!
我尝试在 Grid
table 上为 User
实体创建常规 CRUD 操作 - 就像这样:
public class User {
private id;
private String name
private Role role;
}
具有适当的 getter 和 setter。
Grid
应该有 2 个字段:name
和role.name
。我想为那个
IndexedContainer
创建一个数据Grid
我想进行更新 - 这会将容器的数据绑定到
User
模型。- 我指的模型是
User
实体,而不是 Vaadin 的内部模型
- 我指的模型是
我该怎么做?我有两件事的问题:
- 创建合适的监听器
- 将现有
User
模型绑定到数据IndexedContainer
中的 row/index
解释:
IndexedContainer
有itemId
属性,我可以在其中留下用户 ID,以便将来在更新时绑定。但是在IndexedContainer
上创建ValueChangeListener
之后,我发现我无法访问它的itemId
字段。所以我在
EditorFieldGroup
(Grid
对象的字段)中尝试使用CommitHandler
并且有相同的情况,但我看到itemId
属性 在调试中,但我无法访问它,因为它是一个私有字段。我当然可以通过反思得到它——但我认为这不是一个好的方法。
也许还有其他方法可以从 Grid
表格数据更新 User
模型?
也许我应该像往常一样将 User
id 字段添加到网格 IndexedContainer
属性,但将其设为隐藏和只读?但是我想知道它是否安全并且没有人改变前端形式并且可以使用未在 Grid
table.
User
的威胁
如果有人知道那个典型案例的最佳实践是什么,请告诉我。我会很高兴能得到你的帮助!
使用可编辑网格组件时,您需要使用 FieldGroup
。在您的情况下,您可以使用 BeanFieldGroup
。如果您有正确的 getter/setter 方法,那么 BeanFieldGroup
可以在用户更改和保存网格中的数据时负责更新您的实体实例。以下是一小段代码:
grid.setEditorFieldGroup(
new BeanFieldGroup<Person>(User.class));
此外,您可以使用标准 @NotNull
、@Size
、@Min
、@Max
等为 User
实体添加验证。
有关更多信息,请查看 vaadin 网站的书籍。希望这对您有所帮助!