And this is CatogoryModel class: public class CategoryModel implements Serializable { private static final long serialVersionUID = 1L; private List<OmCategory> omCategories; private OmCategory selectedCategory; public CategoryModel(List<OmCategory> omCategories) { this.omCategories = omCategories; }
public List<OmCategory> getOmCategories() { return omCategories; } public void setOmCategories(List<OmCategory> omCategories) { this.omCategories = omCategories; } public OmCategory getSelectedCategory() { return selectedCategory; } public void setSelectedCategory(OmCategory selectedCategory) { this.selectedCategory = selectedCategory; } } On Mon, Aug 1, 2011 at 12:05 AM, ramazan pekin <rep...@gmail.com> wrote: > Actually, as you said, when I add new bounded object to the collection > new listChoice has been added to page, but whenever I tried to remove > object from collection, related listChoice is not being removed from > page. I have added wrapping container and I specified as target > component to listChoice's onchange action. As result, I have added > "item.remove(listChoice);" to code but this time, exception raised. > > I think I am using ListView wrongly, main problem looks like ListView > related model object. This is my current markup file content. > > <body> > <form wicket:id="form"> > <table wicket:id="categoryContainer"> > <tr> > <td wicket:id="categoryList"> > <select wicket:id="category"/> > </td> > </tr> > </table> > <input type="submit" value="Submit"/> > </form> > </body> > > On Sun, Jul 31, 2011 at 11:02 PM, Christian Huber <hub...@butterbrot.org> > wrote: >> Hi, >> >> this is just a wild guess but in your code you have line that calls >> "item.remove(listChoice);" under certain conditions and the listChoice >> instance is bound to the category identifier which does not seem right to >> me. >> >> As far as I understand ListViews the associated markup block is created for >> each item. If you remove the listChoice from an item then Wicket has no >> object to associate the markup with. So I think you cannot remove the choice >> that way. >> >> I have a similar use case where I also add and remove objects to and from >> ListViews via Ajax and it was sufficient to just remove the object from the >> collection that the ListView relies on and add the wrappign container to the >> ajax target. >> >> Since the listChoice is the only thing you add to an item I figure that >> could also be feasible for your case but as said before this is just a >> hunch. >> >> HTH, Chris >> >> -- >> The Sanity Resort <http://sanityresort.blogspot.com/> >> >> Am 31.07.2011 21:06, schrieb ramazan pekin: >>> >>> Hi to everyone, >>> >>> I am trying to generate dynamic form elements. I need to add and >>> remove some components dynamically. I have added listChoice component >>> succesfuly whenever user select a listChoice item, but when I tried to >>> remove listChoice component, I received an error like that: >>> >>> >>> org.apache.wicket.DefaultExceptionMapper.internalMap(DefaultExceptionMapper.java:102) >>> - Unexpected error occurred >>> org.apache.wicket.markup.MarkupException: Unable to find component >>> with id 'category' in [ListItem [Component id = 1]]. This means that >>> you declared wicket:id=category in your markup, but that you either >>> did not add the component to your page at all, or that the hierarchy >>> does not match. >>> .....Page.html >>> <td wicket:id="categoryList"> >>> >>> <select wicket:id="category"></select> >>> </td>, index = 2, current = '<select >>> wicket:id="category">' (line 16, column 18)] >>> at >>> org.apache.wicket.markup.MarkupStream.throwMarkupException(MarkupStream.java:536) >>> >>> >>> This is form code: >>> >>> public class DynamicForm extends Form { >>> >>> private static final long serialVersionUID = 1L; >>> >>> final ListView<CategoryModel> listView; >>> >>> private List<CategoryModel> categories; >>> >>> public DynamicForm(String id) { >>> super(id); >>> >>> categories = new ArrayList<CategoryModel>(); >>> categories.add(new CategoryModel(masterCategories)); >>> >>> final WebMarkupContainer listContainer = new >>> WebMarkupContainer("categoryContainer"); >>> listView = new ListView<CategoryModel>("categoryList", categories) { >>> >>> private static final long serialVersionUID = 1L; >>> >>> @Override >>> protected void populateItem(final ListItem<CategoryModel> item) { >>> final CategoryModel category = item.getModelObject(); >>> ListChoice<OmCategory> listChoice = new ListChoice<OmCategory>( >>> "category", >>> new PropertyModel<OmCategory>(category, "selectedCategory"), >>> masterCategories, >>> new IChoiceRenderer<OmCategory>() { >>> private static final long serialVersionUID = 1L; >>> >>> public Object getDisplayValue(OmCategory omCategory) { >>> return omCategory.getCategoryCode().getLocalized(); >>> } >>> >>> public String getIdValue(OmCategory omCategory, int index) { >>> return omCategory.getRowId(); >>> } >>> } >>> ); >>> listChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") { >>> private static final long serialVersionUID = >>> 5417882427051940952L; >>> >>> @Override >>> protected void onUpdate(AjaxRequestTarget target) { >>> if(categories.size()> 1&& (categories.indexOf(category) >>> + 1) != categories.size()) { >>> categories = new >>> ArrayList<CategoryModel>(categories.subList(0, >>> (categories.indexOf(category) + 1))); >>> } >>> categories.add(new CategoryModel(masterCategories)); >>> target.add(listContainer); >>> } >>> }); >>> if(categories.indexOf(item.getModelObject()) != -1) { >>> item.add(listChoice); >>> } else { >>> item.remove(listChoice); >>> } >>> } >>> }; >>> listView.setOutputMarkupId(true); >>> listContainer.add(listView); >>> listContainer.setOutputMarkupId(true); >>> add(listContainer); >>> } >>> } >>> >>> >>> First time I am developing with wicket, and maybe I use wrongly. I'm >>> new and any feedback is appreciated... Sorry for my english :) >>> >>> Br. >>> Ramazan >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >>> For additional commands, e-mail: users-h...@wicket.apache.org >>> >> > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org