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 <[email protected]> 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: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to