Many thanks for your feedback!

I am well aware of the fact that HTML spec actually does not allow nested
forms and that wicket is already doing great job while transforming those
nested forms into divs.

I also expected that the bigger form gets submitted as well but only the
nested one processed and the rest ignored, but that's not exactly what's
happening in our case.

The reason for this is that AjaxFormSubmitBehavior always delegates to the
#onFormSubmitted() of the root form

AjaxFormSubmitBehavior, line 135:

getForm().getRootForm().onFormSubmitted();

which then looks up if there is any enabled, visible
IFormSubmittingComponent in the hierarchy that has been triggered. Only in
case that one such IFormSubmittingComponent gets identified, it sets
*formToProcess* to the form of the identified submittingComponent and then
finally invokes

Form, line 920: formToProcess.process(submittingComponent);

The problem with our crazy liitle nested form ;) is that it does not have
any IFormSubmittingComponent but rather a TextField with
AjaxFormSubmitBehavior attached to its "onchange" event that should then
submit the nested form accordingly. This leads to formToProcess being left
assigned to the parentForm that then gets processed at the end:

- from Form#onFormSubmitted():

                    // this is the root form
                    Form<?> formToProcess = this;

                    // find out whether it was a nested form that was
submitted
                    if (submittingComponent != null)
                    {
                        formToProcess = submittingComponent.getForm();
                    }

                    // process the form for this request
                    formToProcess.process(submittingComponent);


We have in the meantime subclassed AjaxFormSubmitBehavior with our own
implementation of AjaxFormSubmitBehavior#onEvent(AjaxRequestTarget target)
method the only difference being the line 135 that was changed from

getForm().getRootForm().onFormSubmitted();

to

getForm().onFormSubmitted();

and did not experience any problems with it, at least so far ;)

Daniel



On Fri, Jan 21, 2011 at 12:25 AM, jcgarciam <jcgarc...@gmail.com> wrote:

>
> Adding to Igor's comment, remember that nested form is not allow in HTML
> spec per se, so what wicket is doing a trick where the root form is submit
> but only elements of nested form (which get transform in DIV tag) are
> processed
>
> On Thu, Jan 20, 2011 at 4:47 PM, Igor Vaynberg-2 [via Apache Wicket] <
> ml-node+3228304-1818027643-65...@n4.nabble.com<ml-node%2b3228304-1818027643-65...@n4.nabble.com>
> <ml-node%2b3228304-1818027643-65...@n4.nabble.com<ml-node%252b3228304-1818027643-65...@n4.nabble.com>
> >
> > wrote:
>
> > the bigger form needs to be processed because what is submitted is the
> > root form's formtag. however, validation, etc, will probably be
> > delegated only to the inner form.
> >
> > -igor
> >
> > On Thu, Jan 20, 2011 at 4:14 AM, Daniel Bartl <[hidden email]<
> http://user/SendEmail.jtp?type=node&node=3228304&i=0>>
> > wrote:
> >
> > > Have a small question regarding using AjaxFormSubmitBehavoir with
> nested
> > > forms.
> > >
> > > Would like to use it to submit a smaller nested form within a bigger
> > parent
> > > form.
> > >
> > > Even though I passed a nested form as a "*form that will be submitted*"
> > > while calling the following constructor of AjaxFormSubmitBehavoir :
> > >    /**
> > >     * Construct.
> > >     *
> > >     * @param form
> > >     *           * form that will be submitted*
> > >     * @param event
> > >     *            javascript event this behavior is attached to, like
> > > onclick
> > >     */
> > >    public AjaxFormSubmitBehavior(Form<?> form, String
> > > event)                 <- passing nested form here
> > >    {
> > >        super(event);
> > >        __form = form;
> > >
> > >        if (form != null)
> > >        {
> > >            form.setOutputMarkupId(true);
> > >        }
> > >    }
> > >
> > >
> > > I noticed that the AjaxFormSubmitBehavior#onEvent(AjaxRequestTarget
> > target)
> > > executes the following line first:
> > > "getForm().getRootForm().onFormSubmitted();"
> > > Why does it still delegate to the root form?
> > >
> > > Shouldn't the line be "getForm().onFormSubmitted();" so that the nested
> > form
> > > and possibly its children get processed only.
> > >
> > >
> > > Many thanks!
> > > Daniel
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [hidden email]<
> http://user/SendEmail.jtp?type=node&node=3228304&i=1>
> > For additional commands, e-mail: [hidden email]<
> http://user/SendEmail.jtp?type=node&node=3228304&i=2>
> >
> >
> >
> > ------------------------------
> >  If you reply to this email, your message will be added to the discussion
> > below:
> >
> >
> http://apache-wicket.1842946.n4.nabble.com/Question-regarding-AjaxFormSubmitBehavior-tp3227451p3228304.html
> >  To start a new topic under Apache Wicket, email
> > ml-node+1842946-398011874-65...@n4.nabble.com<ml-node%2b1842946-398011874-65...@n4.nabble.com>
> <ml-node%2b1842946-398011874-65...@n4.nabble.com<ml-node%252b1842946-398011874-65...@n4.nabble.com>
> >
> > To unsubscribe from Apache Wicket, click here<
> http://apache-wicket.1842946.n4.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=1842946&code=amNnYXJjaWFtQGdtYWlsLmNvbXwxODQyOTQ2fDEyNTYxMzc3ODY=
> >.
> >
> >
>
>
>
> --
> Sincerely,
> JC (http://www.linkedin.com/in/jcgarciam)
> --Anyone who has never made a mistake has never tried anything new.--
>
> --
> View this message in context:
> http://apache-wicket.1842946.n4.nabble.com/Question-regarding-AjaxFormSubmitBehavior-tp3227451p3228728.html
> Sent from the Users forum mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>

Reply via email to