簡體   English   中英

使用Wicket表單時,如何更好地處理Wicket模型的加載?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM