我正在使用Apache Wicket編寫表單。使用相同的頁面/類將新項目添加到數據庫並編輯數據庫中的現有記錄。當然,由於頁面構造函數只被調用一次,因此模型始終設置爲最初加載到頁面上的任何記錄,或者如果我們不編輯現有記錄,則會創建新記錄。如何在使用Wicket窗體時更好地處理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,但它並不完全清楚,我如何最好地處理動態加載它,每當該頁面渲染。我試圖加載模型的一個新實例,重寫getObject()類,它返回我的LoadableDetachableModel,但有些東西感覺非常錯誤。任何輸入將不勝感激。我一直試圖通過獨家的在線文檔來感受我通過這個框架的方式,所以請原諒我明顯缺乏熟悉性。
我不太確定的方法,要archieve但作爲一個旁註什麼:它通常會更好地保持構造函數儘可能短,並將代碼移動到'initialize()'和'onBeforeRender()'方法。在每次渲染前首次渲染組件之前調用initialize(),onBeforeRender()。也許這可能有助於解決您的問題。 – Nicktar 2013-02-18 09:42:12
@Nicktar我絕對看到你在說什麼。我會嘗試使用這些方法來查看我是否可以得到我期待的結果。 – mchandler 2013-02-18 15:29:55