Java 用Wicket中DB的值填写表格

Java 用Wicket中DB的值填写表格,java,wicket,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<>

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

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);
当客户希望插入新联系人时,我会使用该代码,并且它可以正常工作

我现在需要的是处理现有联系人的更新,所以我只需要用已知联系人实例中的值填充现有表单:

联系人=service.get1

我该怎么做


谢谢

您应该在表单组件的模型中使用现有联系人的数据

例如,TextField name=新TextField name,新PropertyModelcontact,name


另请参见CompoundPropertyModel。

我会将CompoundPropertyModel用于表单,这样它将在模型更改时更新,也不需要将数据设置到字段。发送模型创建页面或模型时,可以发送合同实例,甚至可以发送空的合同实例。假设您的类名是MyPanel,然后是构造函数

MyPanel(String id, IModel<Contract> model) {
    super(id, model);
}
现在,当您创建表单时,您可以使用CompoundPropertyModel benefitsinContract类中的字段name、姓氏、mobile等以及公共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);  
    }
});