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

Reply via email to