我正在使用 Apache Wicket 编写表单。相同的页面/类用于向数据库添加新项目并编辑数据库中的现有记录。当然,由于页面构造函数只被调用一次,所以模型总是设置为页面上最初加载的任何记录,或者如果我们不编辑现有记录,则为新记录。
我找到了许多动态加载数据的方法,但它们看起来很冗长而且有点笨拙。我怀疑有处理这种情况的最佳实践。
作为参考,这里是一些编辑过的代码:
public class JobManagement extends WebPage {
private static final long serialVersionUID = 1L;
private long jobId = 0;
protected void setJobId(long id) {
this.jobId = id;
}
protected long getJobId() {
return jobId;
}
public JobManagement() {
LoadableDetachableModel<Job> jobModel = new LoadableDetachableModel<Job>() {
private static final long serialVersionUID = 1L;
@Override
protected Job load() {
Job job = (Job) EntityFactory.getInstance().getBean("job");
// if we're editing an existing job, load the object
if (jobId >= 1) {
job.load(jobId);
}
return job;
}
};
add(new FeedbackPanel("feedbackPanel"));
Form<Job> jobForm = new Form<Job>("jobForm") {
private static final long serialVersionUID = 1L;
@Override
public void onSubmit() {
// Handles the form submit...
}
};
add(jobForm);
jobForm.setModel(new CompoundPropertyModel<Job>(jobModel));
// SNIP ... All my form fields go here!
jobForm.add(new Button("submit"));
}
}
我正在使用 LoadableDetachableModel,但我并不完全清楚如何最好地处理在呈现页面时动态加载它。我试图加载一个模型的新实例,覆盖返回我的 LoadableDetachableModel 的 getObject() 类,但是对此感觉非常错误。任何输入将不胜感激。我一直试图通过专门的在线文档来了解这个框架,所以请原谅我明显缺乏熟悉。