I understood the problem. The solution appears to be tricky. If and when I have it, I'll inform.
Thanks for the tip. It was most helpful. Eyal On Thu, Mar 13, 2008 at 2:32 PM, Johan Compagner <[EMAIL PROTECTED]> wrote: > you can't hold reference to checkboxes.add(checkbox); like that > Because onPopulate() can be called again when you refresh the page and > then > you get a new set > > You can use a reusestrategy for that but still > If you want to set states then you should set states on your model object > that the checkboxes have > > > > On Wed, Mar 12, 2008 at 1:18 PM, Eyal Golan <[EMAIL PROTECTED]> wrote: > > > Hi, > > I made a select-all check box inside a table. > > I used the example from > > > > > http://javathoughts.capesugarbird.com/2007/09/ajax-select-all-checkbox-for-wicket.html > > It works well in most cases. > > > > Here's some code: > > > > Adding the checkgroup to the panel: > > private void addCheckGroup() { > > checkGroup = new MyAjaxCheckBox("allChecked", new > > PropertyModel(this, "allChecked")) { > > private static final long serialVersionUID = 1L; > > > > @Override > > protected void onUpdate(AjaxRequestTarget target) { > > final boolean isSelected = isChecked(); > > if (isSelected) { > > checkGroupModel.addAll(entitiesList); > > } else { > > checkGroupModel.clear(); > > } > > for (MyAjaxCheckBox check : checkboxes) { > > check.setOutputMarkupId(true); > > target.addComponent(check); > > } > > for (EntityWrapper entity : entitiesList) { > > entity.setSelect(isSelected); > > } > > // target.addComponent(EntitiesPanel.this); > > EntitiesPanel.this.onUpdate(target); > > } > > @Override > > public boolean isVisible() { > > return (withSelect && entitiesList != null && > > entitiesList.size() > 0); > > } > > }; > > checkGroup.setOutputMarkupId(true); > > // checkGroup.setVisible(false); > > add(checkGroup); > > } > > > > The Checkbox column inside the table, and the fragment it uses: > > private AbstractColumn createCheckboxColumn() { > > AbstractColumn p = new AbstractColumn(new Model()) { > > private static final long serialVersionUID = 1L; > > > > public void populateItem(Item cellItem, String componentId, > > IModel rowModel) { > > EntityWrapper confEntity = (EntityWrapper) > > rowModel.getObject(); > > Fragment frag = new CheckboxEntityFrag(componentId, > > "checkboxFrag", > > EntitiesPanel.this, confEntity); > > cellItem.add(frag); > > } > > }; > > return p; > > } > > > > private CheckboxEntityFrag(String id, String markupId, > > MarkupContainer markupProvider, > > final EntityWrapper value) { > > super(id, markupId, markupProvider); > > checkbox = new MyAjaxCheckBox("entityCheckbox", new > > PropertyModel(value, "select")) { > > private static final long serialVersionUID = 1L; > > > > @Override > > protected void onUpdate(AjaxRequestTarget target) { > > if (isChecked()) { > > if (!checkGroupModel.contains(value)) > > checkGroupModel.add(value); > > } else { > > checkGroupModel.remove(value); > > } > > setAllChecked(checkGroupModel.size() == > > entitiesList.size()); > > checkGroup.setOutputMarkupId(true); > > target.addComponent(checkGroup); > > EntitiesPanel.this.onUpdate(target); > > } > > }; > > add(checkbox); > > checkboxes.add(checkbox); > > } > > } > > > > The problem: > > someone else uses my panel for his purposes. > > He has a page (search page) that has my panel (with the table and the > > checkboxes). > > His page has a navigation button - NEXT that uses setResponsePage. > > The next page has a PREV button to go back. > > Going back is also with setResponsePage WITH THE ORIGINAL one. > > > > The scenario: > > Open the search page (with my panel) - the 'select-all' work fine. > > Press next. > > Press back. > > > > Press the 'select-all' again. > > I get an exception: java.lang.IllegalStateException: No Page found for > > component [MarkupContainer [Component id = entityCheckbox, page = <No > > Page>, > > path = 1:cells:1:cell:entityCheckbox.EntitiesPanel$CheckboxEntityFrag$1 > ]] > > > > Is there something in a page's component's life cycle that I'm missing? > > > > Hope it's clear. > > > > (I'll be away for a few days so bare with me if I'm not answering) > > > > Thanks > > -- > > Eyal Golan > > [EMAIL PROTECTED] > > > > Visit: http://jvdrums.sourceforge.net/ > > > -- Eyal Golan [EMAIL PROTECTED] Visit: http://jvdrums.sourceforge.net/
