我有一个包含以下逻辑的表单:
TextField name = new TextField<>("name", Model.of(""));
TextField surname = new TextField<>("surname", Model.of(""));
TextField mobile = new TextField<>("mobile", Model.of(""));
TextField phone = new TextField<>("phone", Model.of(""));
HiddenField id = new HiddenField<>("id", Model.of(""));
EmailTextField email = new EmailTextField("email", Model.of(""));
Form form = new Form("formContact") {
@Override
protected void onSubmit() {
super.onSubmit();
Contact contact = new Contact();
contact.setName(name.getValue());
contact.setEmail(email.getValue());
contact.setSurname(surname.getValue());
contact.setMobile(mobile.getValue());
contact.setPhone(phone.getValue());
service.save(contact);
}
};
form.add(id);
form.add(email.setRequired(false));
form.add(name.setRequired(true));
form.add(surname.setRequired(true));
form.add(mobile.setRequired(true));
form.add(phone.setRequired(false));
add(form);
当客户想要插入新的Contact
时,我会使用该代码,并且它可以正常工作。
我现在需要处理现有update
的{{1}},因此我只需要使用已知Contact
实例中的值填充现有表单:
Contact
我该怎么做?
由于
答案 0 :(得分:1)
我会将CompoundPropertyModel用于表单,以便在模型更改时更新,并且不需要将数据设置为字段。在创建页面或模型时发送模型,您可以发送合同实例(甚至是空实例)。假设您的类名是MyPanel,然后是构造函数
MyPanel(String id, IModel<Contract> model) {
super(id, model);
}
现在,当您创建表单时,您可以使用CompoundPropertyModel的好处(在Contract类中应该是字段名称,姓氏,移动等,以及公共getter和setter)
@Override
protected void onInitialize() {
super.onInitialize();
Form<Contract> form = new Form("formContact", new CompoundPropertyModel(getModel()){
@Override
protected void onSubmit() {
super.onSubmit();
service.save(getModelObject());
}
});
add(form);
form.add(new TextField<>("name").setRequired(true));
form.add(new TextField<>("surname").setRequired(true));
form.add(new TextField<>("mobile").setRequired(true));
form.add(new TextField<>("phone").setRequired(false));
form.add(new HiddenField<>("id"));
form.add(new EmailTextField("email").setRequired(false));
让我们点击按钮更新合约
form.add(new AjaxLink<Void>("updateContract"){
@Override
public void onClick(AjaxRequestTarget target) {
form.setModelObject(service.get(1));
target.add(form);
}
});
答案 1 :(得分:0)
您应该使用表单组件模型中现有的联系人数据。
E.g。 TextField name = new TextField<>("name", new PropertyModel(contact, "name"));
另见CompoundPropertyModel。