Apache Wicket を使用してフォームを作成中です。同じページ/クラスを使用して、データベースに新しいアイテムを追加し、データベース内の既存のレコードを編集します。もちろん、ページ コンストラクターは 1 回だけ呼び出されるため、モデルはページに最初に読み込まれたレコード、または既存のレコードを編集していない場合は新しいレコードに常に設定されます。
データを動的にロードする方法をいくつか見つけましたが、それらは冗長で少しぎこちないようです。このようなシナリオを処理するためのベスト プラクティスがあると思います。
参考までに、編集したコードを次に示します。
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() クラスをオーバーライドしましたが、それについて非常に間違っていると感じることがあります。任意の入力をいただければ幸いです。私はこのフレームワークについて、オンライン ドキュメントだけで自分のやり方を感じようとしてきました。