Note that there are some explanatory texts on larger screens.

plurals
  1. POIn Wicket, how to implement a Form with Ajax Paginated List of Checkboxes?
    primarykey
    data
    text
    <p>On my Wicket page, I have a form with a couple of TextFields and a paginated List of Checkboxes iplemenet with dataview and and a data provider. I have <a href="http://wicketstuff.org/wicket13/compref/?wicket%3abookmarkablePage=%3aorg.apache.wicket.examples.compref.CheckGroupPage" rel="nofollow">used this example of Checkgroup</a>.</p> <p>I have listed my source below. The problem is that when I select a few items on Page 1 and then go to Page 2 and then return to Page 1 using the AjaxPagingNavigator, the selection is lost : the items that were checked on Page 1 initially do no have the "check mark" anymore. What should I do so that the items that were selected on page do no get lost when the AjaxPagnigaion is used to traverse the list ?</p> <pre><code>public final class AjaxFormWithPaginatedCheckBoxPage extends BasePage { static Logger logger = Logger.getLogger(AjaxFormWithPaginatedCheckBoxPage.class); private Person person = new Person(); int counter = 0; WebMarkupContainer webMC; static List&lt;Person&gt; pList=Person.getPersons(100); int maxListCount=5; DataView dv; CheckGroup group; public AjaxFormWithPaginatedCheckBoxPage() { super(); final Form form = new Form("form", new CompoundPropertyModel(person)) { protected void onSubmit() { logger.info("form recived"); logger.info(" person name " + person.getName()); setResponsePage(new AjaxTogglePanelTestPage()); } }; final TextField name = new TextField("name"); final TextField age = new TextField("age"); form.add(name); form.add(age); group=new CheckGroup("group", new ArrayList()); form.add(group); webMC= new WebMarkupContainer("webMC"); webMC.setOutputMarkupId(true); //PersonDataProvider personDataProvider= new PersonDataProvider(); SortablePersonDataProvider personDataProvider=new SortablePersonDataProvider(pList); dv = new DataView&lt;Person&gt;("persons", personDataProvider) { @Override protected void populateItem(Item&lt;Person&gt; item) { //AttributeModifier am = new AttributeModifier("src", true, item.getModel()); //item.add(new Radio("radio", item.getModel())); item.add(new Check("check", item.getModel())); item.add(new Label("id", new PropertyModel(item.getModel(), "id"))); item.add(new Label("name", new PropertyModel(item.getModel(), "name"))); item.add(new Label("age", new PropertyModel(item.getModel(), "age"))); } }; dv.setItemsPerPage(maxListCount); webMC.add(new AjaxFallbackOrderByBorder("orderByID", "id", personDataProvider) { @Override protected void onSortChanged() { dv.setCurrentPage(0); } @Override protected void onAjaxClick(AjaxRequestTarget target) { target.addComponent(webMC); } }); webMC.add(new AjaxFallbackOrderByBorder("orderByName", "name", personDataProvider) { @Override protected void onSortChanged() { dv.setCurrentPage(0); } @Override protected void onAjaxClick(AjaxRequestTarget target) { target.addComponent(webMC); } }); webMC.add(new AjaxFallbackOrderByBorder("orderByAge", "age", personDataProvider) { @Override protected void onSortChanged() { dv.setCurrentPage(0); } @Override protected void onAjaxClick(AjaxRequestTarget target) { target.addComponent(webMC); } }); webMC.add(dv); webMC.add(new AjaxPagingNavigator("navigator",dv)); group.add(webMC); AjaxButton ab = new AjaxButton("ajax-button", new PropertyModel&lt;String&gt;(this, "counter"), form) { @Override protected void onSubmit(AjaxRequestTarget target, Form&lt;?&gt; form) { counter++; logger.info("ajx form recived"); logger.info("ajx person name " + person.getName()); target.addComponent(this); } }; form.add(ab); form.setDefaultButton(ab); add(form); } } </code></pre> <p>Ok -- This is the updated and WORKING SOLUTION code based on answer below. Thanks.</p> <pre><code>public final class AjaxFormWithPaginatedCheckBoxPage extends BasePage { static Logger logger = Logger.getLogger(AjaxFormWithPaginatedCheckBoxPage.class); private Person person = new Person(); int counter = 0; WebMarkupContainer webMC; static List&lt;Person&gt; pList=Person.getPersons(100); int maxListCount=5; DataView dv; Set&lt;Person&gt; selectedPersons= new HashSet&lt;Person&gt;(); public AjaxFormWithPaginatedCheckBoxPage() { super(); final Form form = new Form("form", new CompoundPropertyModel(person)) { protected void onSubmit() { logger.info("form recived"); logger.info(" person name " + person.getName()); for(Person p: selectedPersons){ logger.info(" selected "+ p.getName()); } setResponsePage(new AjaxTogglePanelTestPage()); } }; final TextField name = new TextField("name"); final TextField age = new TextField("age"); form.add(name); form.add(age); //group=new CheckGroup("group", new ArrayList()); //form.add(group); /* group.add(new AjaxFormChoiceComponentUpdatingBehavior(){ @Override protected void onUpdate(AjaxRequestTarget target) { logger.info(" AjaxFormChoiceComponentUpdatingBehavior invoked .. "); target.addComponent(webMC); } }); */ webMC= new WebMarkupContainer("webMC"); webMC.setOutputMarkupId(true); //PersonDataProvider personDataProvider= new PersonDataProvider(); SortablePersonDataProvider personDataProvider=new SortablePersonDataProvider(pList); dv = new DataView&lt;Person&gt;("persons", personDataProvider) { @Override protected void populateItem(final Item&lt;Person&gt; item) { //item.add(new Check("check", item.getModel())); AjaxCheckBox ajc=new AjaxCheckBox("check", new PropertyModel(item.getModel(), "id")) { @Override protected void onUpdate(AjaxRequestTarget art) { logger.info("onupdate called"); String value=getValue(); if(value==null){ logger.info("dunno what to do .."); throw new IllegalArgumentException(" ajax check box returned null"); } Person op=((Person)(item.getDefaultModelObject())); logger.info("person "+ op.getName() +" was "+ person.isSelected() ); boolean bret= Strings.isTrue(value); if(bret==false){ logger.info(" ... UN-selected"); //((Person)(item.getDefaultModelObject())).setSelected(false); selectedPersons.remove(op); } else{ logger.info("....selected"); //((Person)(item.getDefaultModelObject())).setSelected(true); selectedPersons.add(op); } } }; item.add(ajc); item.add(new Label("id", new PropertyModel(item.getModel(), "id") ) ); item.add(new Label("name", new PropertyModel(item.getModel(), "name"))); item.add(new Label("age", new PropertyModel(item.getModel(), "age"))); } }; dv.setItemsPerPage(maxListCount); webMC.add(new AjaxFallbackOrderByBorder("orderByID", "id", personDataProvider) { @Override protected void onSortChanged() { dv.setCurrentPage(0); } @Override protected void onAjaxClick(AjaxRequestTarget target) { target.addComponent(webMC); } }); webMC.add(new AjaxFallbackOrderByBorder("orderByName", "name", personDataProvider) { @Override protected void onSortChanged() { dv.setCurrentPage(0); } @Override protected void onAjaxClick(AjaxRequestTarget target) { target.addComponent(webMC); } }); webMC.add(new AjaxFallbackOrderByBorder("orderByAge", "age", personDataProvider) { @Override protected void onSortChanged() { dv.setCurrentPage(0); } @Override protected void onAjaxClick(AjaxRequestTarget target) { target.addComponent(webMC); } }); webMC.add(dv); webMC.add(new AjaxPagingNavigator("navigator",dv)); // group.add(webMC); AjaxButton ab = new AjaxButton("ajax-button", new PropertyModel&lt;String&gt;(this, "counter"), form) { @Override protected void onSubmit(AjaxRequestTarget target, Form&lt;?&gt; form) { counter++; logger.info("ajx form recived"); logger.info("ajx person name " + person.getName()); target.addComponent(this); } }; form.add(webMC); form.add(ab); form.setDefaultButton(ab); add(form); } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload