[Wicket-ja-user 111] Re: Form内でListViewを使った場合の挙動について

Back to archive index

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
>




Wicket-ja-user メーリングリストの案内
Back to archive index