gpt4 book ai didi

java - 使用 Wicket 中数据库中的值填写表单

转载 作者:行者123 更新时间:2023-12-02 13:11:19 26 4
gpt4 key购买 nike

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

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 = service.get(1);

我怎样才能做到这一点?

谢谢

最佳答案

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

MyPanel(String id, IModel<Contract> model) {
super(id, model);
}

现在,当您创建表单时,您可以使用CompoundPropertyModel的好处(在Contract类中应该是具有公共(public)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));

让我们通过点击按钮来更新契约(Contract)

form.add(new AjaxLink<Void>("updateContract"){

@Override
public void onClick(AjaxRequestTarget target) {
form.setModelObject(service.get(1));
target.add(form);
}
});

关于java - 使用 Wicket 中数据库中的值填写表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43940299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com