[英]How should I better handle loading of Wicket Models when using Wicket forms?
我正在使用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,但是我尚不清楚如何在呈現頁面時最好地動態地動態加載它。 我試圖加載一個Model的新實例,重寫getObject()類,該類返回我的LoadableDetachableModel,但是有些事情對此感到很不對勁。 任何輸入將不勝感激。 我一直試圖通過在線文檔完全了解這個框架,因此請原諒我明顯的不熟悉。
為了回答我自己的問題,我遇到的問題是,每次返回頁面時,綁定到表單的模型似乎都會保留下來。 這使我相信問題出在我如何管理模型,但是問題實際上與我如何鏈接到頁面有關。
上面的頁面被鏈接如下:
Link<String> link = new BookmarkablePageLink<String>("addLink", MyAddClass.class);
盡管在某些情況下這是可以接受的方法,但在此特定情況下這不是正確的方法。 應該發生的事情是這樣的:
Link<String> link = new Link<String>("addLink") {
public void onClick() {
setResponsePage(new MyAddClass());
}
}
當以這種方式動態處理鏈接時,我的應用程序將按預期運行。 感謝所有參與我工作的人,以幫助我打開我的鏈接解決這個根本問題的機會。
盡管鏈接方法(先前的答案)可能會引起問題,並且通常取決於實現鏈接的方式,但在這種情況下,實際的問題是用於加載域對象實例的“ EntityFactory”。 在這種情況下,它提供的是緩存數據,而不是實例化新實例。
綜上所述,在類似情況下,當您再次瀏覽到表單時,表單的模型對象似乎沒有重置時,需要評估的內容:
1-您用於訪問該頁面的鏈接策略
2-您用於將域對象加載並綁定到表單上的模型的方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.