I removed "item.remove(listChoice);" from code and I just changed ListView definition, I used PropertyModel, and every thing working well...
listView = new ListView<CategoryModel>("categoryList", categories) { -> I changed this line as below => listView = new ListView<CategoryModel>("categoryList", new PropertyModel<List<CategoryModel>>(this, "categories")) { On Mon, Aug 1, 2011 at 12:09 AM, ramazan pekin <rep...@gmail.com> wrote: > 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