使用Wicket中DB的值填写表单

时间:2017-05-12 14:33:03

标签: java wicket

我有一个包含以下逻辑的表单:

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

我该怎么做?

由于

2 个答案:

答案 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。