私は最初の Spring 3 webapp を開発しています。Spring 2 では、formBackingObject でデータベースからデータをロードし、Spring バインディングでフィールドの一部を更新し、onSubmit でそれらの変更を保持していました。
Spring 3 では、次の 2 つのオプションがあるようです。
- ユーザーが永続オブジェクトを 100% 編集できるようにします。これは、オブジェクトの ID が隠しフィールドである必要があることを意味します。
- 編集可能なデータを保持するフォーム オブジェクトを作成し、送信時にそれを永続オブジェクトにマップします。
最初のオプションは実際にはオプションではありません。ユーザーにすべてのフィールドを編集させることはできません。また、F12 キーを押すことができる人なら誰でも値を変更できる隠しフィールドにデータを表示したくありません。
2 番目のオプションは、まともな設計アプローチのようです。ただし、基本的にすべての編集可能な永続クラスを複製する必要があるようです。
@Entity
public class Company {
private String uuid; // not editable!
.. 30 other properties, 2 are not editable
}
public class CompanyForm {
.. 28 of above properties
}
そして、多くのマッピングメカニズム
public void map(CompanyForm cf, Company c) {
cf.setName(c.getName());
.. 27 other set(get())
}
これが Spring の MVC バインディングの「設計どおり」のアプローチではないことを祈っています。ただし、これまでに見つけたすべてのチュートリアルは非常に簡単で、上記のオプション 1 を実装しています。オプション2を実装するための提案はありますか?
ありがとう、サイモン