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

Reply via email to