Hi Wojciech,

You should use Buttons instead of links. Button (or AjaxFallbackButton) does submit the form. The only thing you need to do is disable validation on the button (call button.setDefaultFormProcessing(false)), otherwise the onSubmit of the button is not called when some field in the form does not validate. You can optionally call form.validate() in the onSubmit of the button so that validation messages do not disappear.

OT: personally, in forms I prefer RefreshingView instead of ListView.

Regards,
   Erik.

--
Erik van Oosten
http://www.day-to-day-stuff.blogspot.com/


Wojciech Biela wrote:
Hello

This time my question is not so general.

We have a big form, part of this form there is a component which
should be a dynamic list of fields like this:

|TextField| - remove
|TextField| - remove
|TextField| - remove
|TextField| - add

if you click "add" another row "|TextField| - remove" should appear at
the bottom, it you should click "remove" then this row should be
removed

problem we have is that the "add" and "remove" link does not send the
form, it only sends and ajax request to add an element to the list of
components and it operates (target) on a DIV that wraps the whole
list, so afterwards it renders the list again loosing values that were
already put in

what is the preferred method to do such a thing? should the add and
remove link be a submit link with defaultFormProcessing set to false?
or maybe should we try to save values to model objects onchange in the
respective fields themselves

isn't there a way to do it in a neat fashion?

code responsible for the list component is

    wrapper = new WebMarkupContainer("attributes-wrapper");
    listView = new ListView("attributes", attributeValuesList) {
      public void populateItem(final ListItem listItem) {
        final AttributeValue attributeValue = (AttributeValue)
listItem.getModelObject();
        Renderer inputRenderer =
attributeValue.getAttribute().getInputRenderer();
        Component component = inputRenderer.getComponent(attributeValue);
        listItem.add(component);
        AjaxLink addLink = new AddLink("add-link");
        AjaxLink removeLink = new RemoveLink("remove-link", listItem);
        if (listItem.getIndex() < (listView.getViewSize() - 1)) {
          addLink.setVisible(false);
        } else {
          removeLink.setVisible(false);
        }
        listItem.add(addLink);
        listItem.add(removeLink);
      }
    };
    wrapper.setOutputMarkupId(true);

HTML is

        <div wicket:id="attributes-wrapper" class="composit-wrapper">
                <div wicket:id="attributes" class="composit">
                        <div wicket:id="attributeAndValue" 
class="composit-item"></div>
                        <div class="composit-links">
                        <a wicket:id="add-link">+ add</a>
                        <a wicket:id="remove-link">- remove</a>
                        </div>
                </div>
        </div>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to