koyane
koyan****@gmail*****
2008年 6月 4日 (水) 19:19:44 JST
日置と申します。 Form内でListViewを使った以下のような画面を作ったのですが、 思ったような挙動をしてくれず困っています。 具体的に言うと、親のオブジェクトのフィールドに関しては あたりまえですが、問題なく動作するのですが、 ListViewで処理している子のオブジェクトの入力フィールドの 入力内容が入力チェックでエラーとなった場合のみ破棄されてしまいます。 defaultFormProcessingをfalseにした場合にも同様の動作をするので、 何かそこらへんに原因があるのかなあとは思っているのですが、 Formの処理サイクルがまだ理解できていないので、問題の解決に たどり着けないでいます。 このような状況でListViewで処理している子のオブジェクトの入力フィールドの 入力情報を保持することは可能でしょうか? public class TestPage extends WebPage { public TestPage(){ //フィードバックパネル add(new FeedbackPanel("feedback")); //編集対象データ IModel<Entity> model = createEntry(); //フォーム Form<Entity> form = new Form<Entity>("form",model); //親エントリーのフィールド TextField<String> name = new TextField<String>("name"); name.add(StringValidator.minimumLength(5)); name.setRequired(true); form.add(name); //子エントリーのフィールド ListView<Entity> checks = new ListView<Entity>("checks"){ private static final long serialVersionUID = 1L; @Override protected void populateItem(ListItem<Entity> item) { List<Integer> years = Arrays.asList(2008,2009,2010); item.add(new DropDownChoice<Integer>("year", years)); item.add(new CheckBox("check")); } @Override protected IModel<Entity> getListItemModel(IModel<List<Entity>> model, int i) { List<Entity> list = model.getObject(); return new CompoundPropertyModel<Entity>(list.get(i)); } }; form.add(checks); //submitボタン form.add(new Button<String>("submit"){ private static final long serialVersionUID = 1L; @Override public void onSubmit() { //とくになにもしない } }); add(form); } //エントリーをつくるのです private CompoundPropertyModel<Entity> createEntry(){ Entity entry = new Entity(); entry.checks.add(new ChildEntity(2008,false)); entry.checks.add(new ChildEntity(2009,false)); entry.checks.add(new ChildEntity(2010,false)); return new CompoundPropertyModel<Entity>(entry); } //親 class Entity{ String name; List<ChildEntity> checks = new ArrayList<ChildEntity>(); } //子 class ChildEntity{ ChildEntity(Integer year,Boolean check){ this.year = year; this.check = check; } Integer year; Boolean check; } }