You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Esko Suomi <es...@conmio.com> on 2008/11/13 11:13:56 UTC

Ajax Response breaks down if CheckGroupSelector is added to AjaxFallbackDefaultDataTable

.....which is not desired. I have a test case which is something like this:


    tester.clickLink("form:group:table:rows:1:cells:8:cell:delete", true);
    tester.assertComponentOnAjaxResponse("form:group:table");


group is CheckGroup, table is AjaxFallbackDefaultDataTable and delete is 
AjaxFallbackLink. The code for delete link which is in its own column 
looks like this:


    columns.add(new AbstractColumn<MyObject>(new Model("Edit")) {
       
        public void populateItem(Item<ICellPopulator<MyObject>> item, 
String id, IModel<MyObject> model) {
            Fragment f = new Fragment(id, "editlink", getPage());
           
            Link<MyObject> delete = new 
AjaxFallbackLink<MyObject>("delete", model) {
                @Override
                public void onClick(AjaxRequestTarget art) {
                    getAdPersister().delete(getModelObject());
                    if (art != null) art.addComponent(table);
                }
            };
            delete.add(new Label("label", "delete"));
            delete.add(new SimpleAttributeModifier("onclick", "return 
confirm('are you sure?');"));
            f.add(delete);
            item.add(f);
        }
       
    });


and its fragment's markup looks like this:


    <wicket:fragment wicket:id="editlink">
        <a wicket:id="link"><wicket:component 
wicket:id="label"></wicket:component></a>
        <a wicket:id="delete"><wicket:component 
wicket:id="label"></wicket:component></a>
    </wicket:fragment>


The snippets above works if CheckGroupSelector isn't present. What I 
wanted to do was to add a checkbox to each row as new column and a 
"select all" checkbox to the new column's header so first I added this:


    columns.add(new AbstractColumn<MyObject>(new Model("Controls")) {
        public void populateItem(Item<ICellPopulator<MyObject>> item,
                String id, IModel<MyObject> model) {
            Fragment f = new Fragment(id, "checkboxfragment", getPage());
            f.add(new Check("check", new Model(false)));
            item.add(f);
        }
    });


Markup for the fragment is


    <wicket:fragment wicket:id="checkboxfragment">
        <input type="checkbox" wicket:id="check" />
    </wicket:fragment>


I also added the components to hierarchy like so:


    CheckGroup myGroup = new CheckGroup("group", new ArrayList());
    form = new Form("form");
    table = newTable(); // this method creates the entire table
    myGroup.add(table);
    form.add(myGroup);


With that everything still works so I added the header override like so:


    columns.add(new AbstractColumn<MyObject>(new Model("Controls")) {
           
        @Override
        public Component<?> getHeader(String componentId) {
            Fragment f = new Fragment(componentId, "checkboxfragment", 
getPage());
            f.add(new CheckGroupSelector("check"));
            return f;
        }

        public void populateItem(Item<ICellPopulator<MyObject>> item,
                String id, IModel<MyObject> model) {
            Fragment f = new Fragment(id, "checkboxfragment", getPage());
            f.add(new Check("check", new Model(false)));
            item.add(f);
        }
    });


and now that I run the test case it now gives me the following exception 
on the line     tester.assertComponentOnAjaxResponse("form:group:table");


    junit.framework.AssertionFailedError: Component wasn't found in the 
AJAX response


Any ideas how I can get this to work?

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Ajax Response breaks down if CheckGroupSelector is added to AjaxFallbackDefaultDataTable

Posted by Igor Vaynberg <ig...@gmail.com>.
try repainting the form instead of the table

-igor

On Thu, Nov 13, 2008 at 2:13 AM, Esko Suomi <es...@conmio.com> wrote:
> .....which is not desired. I have a test case which is something like this:
>
>
>   tester.clickLink("form:group:table:rows:1:cells:8:cell:delete", true);
>   tester.assertComponentOnAjaxResponse("form:group:table");
>
>
> group is CheckGroup, table is AjaxFallbackDefaultDataTable and delete is
> AjaxFallbackLink. The code for delete link which is in its own column looks
> like this:
>
>
>   columns.add(new AbstractColumn<MyObject>(new Model("Edit")) {
>             public void populateItem(Item<ICellPopulator<MyObject>> item,
> String id, IModel<MyObject> model) {
>           Fragment f = new Fragment(id, "editlink", getPage());
>                     Link<MyObject> delete = new
> AjaxFallbackLink<MyObject>("delete", model) {
>               @Override
>               public void onClick(AjaxRequestTarget art) {
>                   getAdPersister().delete(getModelObject());
>                   if (art != null) art.addComponent(table);
>               }
>           };
>           delete.add(new Label("label", "delete"));
>           delete.add(new SimpleAttributeModifier("onclick", "return
> confirm('are you sure?');"));
>           f.add(delete);
>           item.add(f);
>       }
>         });
>
>
> and its fragment's markup looks like this:
>
>
>   <wicket:fragment wicket:id="editlink">
>       <a wicket:id="link"><wicket:component
> wicket:id="label"></wicket:component></a>
>       <a wicket:id="delete"><wicket:component
> wicket:id="label"></wicket:component></a>
>   </wicket:fragment>
>
>
> The snippets above works if CheckGroupSelector isn't present. What I wanted
> to do was to add a checkbox to each row as new column and a "select all"
> checkbox to the new column's header so first I added this:
>
>
>   columns.add(new AbstractColumn<MyObject>(new Model("Controls")) {
>       public void populateItem(Item<ICellPopulator<MyObject>> item,
>               String id, IModel<MyObject> model) {
>           Fragment f = new Fragment(id, "checkboxfragment", getPage());
>           f.add(new Check("check", new Model(false)));
>           item.add(f);
>       }
>   });
>
>
> Markup for the fragment is
>
>
>   <wicket:fragment wicket:id="checkboxfragment">
>       <input type="checkbox" wicket:id="check" />
>   </wicket:fragment>
>
>
> I also added the components to hierarchy like so:
>
>
>   CheckGroup myGroup = new CheckGroup("group", new ArrayList());
>   form = new Form("form");
>   table = newTable(); // this method creates the entire table
>   myGroup.add(table);
>   form.add(myGroup);
>
>
> With that everything still works so I added the header override like so:
>
>
>   columns.add(new AbstractColumn<MyObject>(new Model("Controls")) {
>                 @Override
>       public Component<?> getHeader(String componentId) {
>           Fragment f = new Fragment(componentId, "checkboxfragment",
> getPage());
>           f.add(new CheckGroupSelector("check"));
>           return f;
>       }
>
>       public void populateItem(Item<ICellPopulator<MyObject>> item,
>               String id, IModel<MyObject> model) {
>           Fragment f = new Fragment(id, "checkboxfragment", getPage());
>           f.add(new Check("check", new Model(false)));
>           item.add(f);
>       }
>   });
>
>
> and now that I run the test case it now gives me the following exception on
> the line     tester.assertComponentOnAjaxResponse("form:group:table");
>
>
>   junit.framework.AssertionFailedError: Component wasn't found in the AJAX
> response
>
>
> Any ideas how I can get this to work?
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org