Takeshi Matsuba
tma****@gside*****
2008年 6月 5日 (木) 09:52:24 JST
松葉と申します。 FormにネストされたListViewで値を保持するには setReuseItems を trueにせっとする必要があります。 checks.setReuseItems(true); でどうでしょう。 2008/06/04 19:19 koyane <koyan****@gmail*****>: > 日置と申します。 > > 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; > } > } > > _______________________________________________ > Wicket-ja-user mailing list > Wicke****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user >