我有一个java类:
public Task { private int id; private Company sender; private Company receiver; //Getter and Setter ... }
如您所见,我在任务类中还有另外 2 个自定义类。一家公司有例如地址和目录。
我有一个可在页面上重复使用的 CompanyPanel。这是面板中的一些代码。
public class CompanyPanel extends Panel { protected List<Company> companies; public CompanyPanel(String id, IModel<Company> model) { super(id,new CompoundPropertyModel<Company>(model)); companies = new ArrayList<Company>(); Company company_1 = new Company(); //Setting default predefined values for the company, so I can select it from the dropdown and to set fields automatically company_1.setFtpAdress("adress1.com"); company_1.setFtpDir("/MusterDir/"); companies.add(company_1); //SAME for another company ... companies.add(comany_2); ... final DropDownChoice<Company> companyList = new DropDownChoice<Company>("companies", model, new LoadableDetachableModel<List<Company>>() { @Override protected List<Company> load() { return companies; } }){ protected boolean wantOnSelectionChangedNotifications() { return true; } }; add(companyList); final TextField<String> ftpAdress = new TextField<String>("ftpAdress"); ftpAdress.setOutputMarkupId(true); add(ftpAdress); final TextField<String> ftpDir = new TextField<String>("ftpDir"); ftpDir.setOutputMarkupId(true); add(ftpDir); //added Ajax to dropdown to update textfields automatically, based on selection of dropdown companyList.add(new AjaxFormComponentUpdatingBehavior("onchange") { @Override protected void onUpdate(AjaxRequestTarget target) { target.add(ftpAdress); target.add(ftpDir); } }); } }
在页面中,我使用可重用的 CompanyPanel。
... CompanyPanel senderPanel = new CompanyPanel("senderPanel", new PropertyModel(task,"sender")); senderPanel.setOutputMarkupId(true); form.add(senderPanel); CompanyPanel receiverPanel = new CompanyPanel("receiverPanel", new PropertyModel(task,"receiver")); receiverPanel.setOutputMarkupId(true); form.add(receiverPanel); ...
当我提交表格时,我会:
public void onSubmit(AjaxRequestTarget target, Form<?> form) { //doSomething target.add(senderPanel); target.add(receiverPanel); }
问题:公司面板没有被重新渲染。我真的不知道为什么。
工作流程:
- 我从下拉面板中选择一家公司
- 将根据下拉菜单正确设置 TextFields(位于 companyPanel 内)
- 我修改了一个文本字段(属于一家公司)
- 我提交表格
- 我从下拉列表中更改公司
- 我改回第一家公司-> 问题:修改后的文本字段仍然显示里面修改后的文本。它没有重置为默认值。
非常感谢任何帮助。