我目前正在使用Vaadin 10和Vaadin绑定API。基本上,我想知道我该怎么做才能保留对象的ID。假设我有一个域对象,表示数据库中的一个实体。加载或创建后,它就有一个ID。
public class Person {
private String id;
private String name;
// ...
}
在我看来,我有一个字段可以编辑名称和域对象的活页夹。
...
final TextField name = new TextField();
personBinder.bind(name, "name");
...
现在我该如何处理ID?如果我保存并加载bean(readBean
/ writeBean
),则ID会消失。但是,当然,我不想在视图中显示该ID。是否需要将其存储在视图类的新属性中?还是有技巧在活页夹中保留这些属性?如果我改用setBean
/ getBean
,我似乎可以用id检索bean,但这似乎不正确。
非常感谢您!
编辑1:
假设我有以下代码
TextField name = new TextField();
personBinder.bind(name, "name");
add(name);
Button button = new Button("Save", e -> {
Person p = new Person();
personBinder.writeBeanIfValid(p);
System.out.println(p.getName());
System.out.println(p.getId());
});
add(button);
Person p = new Person();
p.setName("John");
p.setId("42");
personBinder.readBean(p);
由于ID未绑定到任何字段,因此未保留。
答案 0 :(得分:1)
似乎setBean / getBean方法实际上并没有错。至少Vaadin 8文档中有使用该示例的示例。它在“自动保存”下列出。因此,我上面的示例代码可能应该是这样的:
TextField name = new TextField();
personBinder.bind(name, "name");
add(name);
Button button = new Button("Save", e -> {
if (personBinder.validate().isOk()) {
Person p = personBinder.getBean();
System.out.println(p.getName());
System.out.println(p.getId());
}
});
add(button);
Person p = new Person();
p.setName("John");
p.setId("42");
personBinder.setBean(p);
只要没有验证错误(这是事先检查的原因),这些字段中的值就会保存在Bean中。当然,必须确保同一bean在其他地方没有被修改。