I'm also reading this...
http://cwiki.apache.org/WICKET/nested-forms.html
which in the case of "all forms enabled, inner form submitted" (3rd row).

the result should be:


Outer: nothing called, but input is preserved

Middle: nothing called, but input is preserved

Inner: onSubmit called

So again, i come to think that onFormSubmitted should be called in the Form
i passed to my ajax submit link, not the root form.
But perhaps i'm missing something?

Thanks for the support,

German

2008/9/10 German Morales <[EMAIL PROTECTED]>

> There are no nested form tags, as expected... let me give you more details
> i'm discovering:
>
> The AjaxSubmitLink has something like this...
>  function onclick(event) {
>    var wcall = wicketSubmitFormById(" < id of my nested form > ");
>    return false;
>  }
>
> This calls wicketSubmitFormById, no surprises...
>  function wicketSubmitFormById(formId, url, submitButton, successHandler,
> failureHandler, precondition, channel) {
>    var call = new Wicket.Ajax.Call(url, successHandler, failureHandler,
> channel);
>    ...
>    return call.submitFormById(formId, submitButton);
>  }
>
> which calls submitFormById...
>  submitFormById: function(formId, submitButton) {
>    var form = Wicket.$(formId);
>    ...
>    return this.submitForm(form, submitButton);
>  }
>
> which calls submitForm passing my nested form (i'm debugging with Firebug)
>  // Submits a form using ajax.
>  // This method serializes a form and sends it as POST body.
>  submitForm: function(form, submitButton) {
>    var body = function() {
>      var s = Wicket.Form.serialize(form);
>      if (submitButton != null) {
>        s += Wicket.Form.encode(submitButton) + "=1";
>      }
>      return s;
>    }
>    return this.request.post(body);
>  }
>
> which ultimately calls Wicket.Form.serialize(form) with my nested form, not
> with the root form.
>
> Am i right?
>
> German
>
> PS: meanwhile i'm trying to produce a quickstart... but i guess it will
> take me some time.
>
> 2008/9/10 Matej Knopp <[EMAIL PROTECTED]>
>
>> But that is exactly what should happen. Wicket javascript should find
>> root form element and serialize that. Can you please check in your
>> markup if there are any nested form tags? (shouldn't be).
>>
>> -Matej
>>
>> On Wed, Sep 10, 2008 at 8:11 PM, German Morales
>> <[EMAIL PROTECTED]> wrote:
>> > That would be somehow complicated to produce right now.
>> >
>> > To make my question different... why the javascript side sends only the
>> > nested form info (wicketSubmitFormById()) and on wicket side the root
>> form
>> > is the one that gets called?
>> >
>> > I've already tried and it works ok if i make the nested form do the
>> > processing instead of the root form.
>> >    protected void onEvent(AjaxRequestTarget target) {
>> >        getForm().onFormSubmitted();  // getRootForm() removed
>> >
>> > Another possibility would be that javascript side sends the values for
>> the
>> > root form, and then it would be ok that the root form does the
>> processing.
>> >
>> > Thanks,
>> >
>> > German
>> >
>> >
>> > 2008/9/10 Matej Knopp <[EMAIL PROTECTED]>
>> >
>> >> I would need a quick start to see where it is going wrong.
>> >>
>> >> -Matej
>> >>
>> >> On Wed, Sep 10, 2008 at 7:26 PM, German Morales
>> >> <[EMAIL PROTECTED]> wrote:
>> >> > Investigating a little more, my problem seems to be caused by
>> >> > AjaxFormSubmitBehavior#onEvent
>> >> >
>> >> >    protected void onEvent(AjaxRequestTarget target) {
>> >> >        getForm().getRootForm().onFormSubmitted();
>> >> >
>> >> > which calls onFormSubmitted on the RootForm, and not in the Form i've
>> >> passed
>> >> > to my AjaxSubmitLink.
>> >> >
>> >> > could someone explain me why it does that?
>> >> >
>> >> > In fact, overriding onEvent to call onFormSubmitted on getForm() and
>> not
>> >> in
>> >> > the root form solves my problems... but am i breaking something else?
>> >> >
>> >> > Thanks,
>> >> >
>> >> > German
>> >> >
>> >> >
>> >> > 2008/9/9 German Morales <[EMAIL PROTECTED]>
>> >> >
>> >> >> Hi Matej,
>> >> >>
>> >> >> Thanks for the answer.
>> >> >>
>> >> >> I have an AjaxSubmitLink both for opening and closing the modal
>> window.
>> >> >> Should that make any trouble?
>> >> >> In both cases i have data to persist, so it must be a .*Submit.*
>> >> component.
>> >> >>
>> >> >> Also, my problem happens when closing the window, not when opening
>> it.
>> >> >> I summarize it again:
>> >> >> -the browser sends an ajax call with the values in the modal window
>> >> >> -but on wicket side the main form of the page is the one that takes
>> >> charge
>> >> >> -the components on the page then receive the new input, but there's
>> >> >> actually nothing coming from the browser for them
>> >> >> -some components (text components) handle it well, some not
>> (checkbox,
>> >> >> dropdownchoice).
>> >> >> -the misbehaving component get a rawinput of null instead of
>> >> NO_RAW_INPUT,
>> >> >> which then produces the side effect that the component does not get
>> the
>> >> >> value from the model on rendering.
>> >> >>
>> >> >> Please see the doubts section at the end of the original e-mail.
>> >> >>
>> >> >> Thanks again,
>> >> >>
>> >> >> German
>> >> >>
>> >> >> 2008/9/9 Matej Knopp <[EMAIL PROTECTED]>
>> >> >>
>> >> >> The link that shows the modal window must be AjaxButton/SubmitLink.
>> >> >>>
>> >> >>> -Matej
>> >> >>>
>> >> >>> On Tue, Sep 9, 2008 at 11:20 PM, German Morales
>> >> >>> <[EMAIL PROTECTED]> wrote:
>> >> >>> > Hi all,
>> >> >>> >
>> >> >>> > I've a problem with Forms and ModalWindows.
>> >> >>> >
>> >> >>> > I have this stuff:
>> >> >>> > -a page with a main Form (the only one that is rendered as an
>> HTML
>> >> form
>> >> >>> tag)
>> >> >>> > -this my only page, since all inside it is changed by replacing
>> >> panels
>> >> >>> using
>> >> >>> > ajax.
>> >> >>> > -inside some other levels of panels, i have a panel with my
>> content
>> >> (let
>> >> >>> me
>> >> >>> > call it myContentPanel), which has its own (sub) Form (which is
>> >> rendered
>> >> >>> as
>> >> >>> > a div).
>> >> >>> > -myContentPanel has some controls... TextFields, DropDownChoices,
>> >> >>> > CheckBoxes.
>> >> >>> > -myContentPanel has also a link that opens a ModalWindow.
>> >> >>> > -the ModalWindow has its own Form with components, and an
>> >> AjaxSubmitLink
>> >> >>> to
>> >> >>> > close it.
>> >> >>> >
>> >> >>> > Now the problem...
>> >> >>> > 1- I enter to myContentPanel and enter some values in the
>> components.
>> >> >>> > 2- I press the link to open the ModalWindow.
>> >> >>> > 3- I work with the ModalWindow, then press an AjaxSubmitLink to
>> close
>> >> >>> it.
>> >> >>> > 4- When refreshing myContentPanel, the values in some controls is
>> >> lost:
>> >> >>> > CheckBoxes, DropDownChoices, but NOT in TextFields.
>> >> >>> >
>> >> >>> > After some investigation, this is what i've discovered:
>> >> >>> > -on step 3 (accept and close the ModalWindow), the AjaxSubmitLink
>> >> calls
>> >> >>> > (javascript) wicketSubmitFormById passing the ModalWindow's form
>> as
>> >> >>> > parameter.
>> >> >>> > -this processes the ModalWindow's form and prepares the values to
>> be
>> >> >>> sent to
>> >> >>> > wicket side.
>> >> >>> > -but when i see the url, it mentions that the form that will be
>> used
>> >> for
>> >> >>> the
>> >> >>> > HTTP request is the page's form (because it's the only real form,
>> i
>> >> >>> think
>> >> >>> > this is normal).
>> >> >>> > -on wicket side, the request processing calls
>> Form#onFormSubmitted,
>> >> >>> which
>> >> >>> > calls #inputChanged, which calls a visitor visiting all
>> components...
>> >> in
>> >> >>> the
>> >> >>> > main form!
>> >> >>> > -this ends up calling FormComponent#inputChanged on the
>> CheckBoxes,
>> >> >>> > DropDownChoices, TextFields that where in myContentPanel (also
>> for
>> >> the
>> >> >>> > controls in the ModalWindow, but that's no surprise).
>> >> >>> > -given that the javascript only prepared the data for the
>> >> ModalWindow's
>> >> >>> > form, the values for the components in myContentPanel is empty.
>> >> >>> > -looking deeper in #inputChanged, getInputAsArray() gives null
>> for
>> >> the
>> >> >>> > components in myContentPanel.
>> >> >>> > -then, since CheckBox and DropDownChoice answer true to
>> >> >>> isInputNullable()
>> >> >>> > (default in FormComponent), the rawInput is set to null, even if
>> i
>> >> >>> didn't
>> >> >>> > touch the CheckBoxes/DropDownChoices at all in this call (then
>> losing
>> >> >>> the
>> >> >>> > previous value: NO_RAW_INPUT).
>> >> >>> > -on step 4, when the CheckBox/DropDownChoice wants to get
>> rendered
>> >> >>> again,
>> >> >>> > onComponentTag calls FormComponent#getValue, which if
>> >> >>> > (NO_RAW_INPUT.equals(rawInput)) uses the Model to get the value
>> (what
>> >> i
>> >> >>> > would expect), but in my case returns the rawInput (null...
>> ouch).
>> >> >>> >
>> >> >>> > I have fixed it temporaly by overriding isInputNullable in my
>> >> >>> > CheckBoxes/DropDownChoice, but i understand that this is not a
>> very
>> >> good
>> >> >>> > solution.
>> >> >>> >
>> >> >>> > Some doubts that remain:
>> >> >>> > -is there anything wrong with my structure of forms and panels,
>> which
>> >> is
>> >> >>> > actually producing these side effects?
>> >> >>> > -if only the values for ModalWindow form are sent to the server,
>> why
>> >> the
>> >> >>> is
>> >> >>> > onFormSubmitted called on the main page form?
>> >> >>> > -the javadoc in isInputNullable is not very clear for me... do i
>> >> break
>> >> >>> > something else if i override isInputNullable answering false?
>> >> >>> >
>> >> >>> > Thanks in advance,
>> >> >>> >
>> >> >>> > German
>> >> >>> >
>> >> >>>
>> >> >>>
>> ---------------------------------------------------------------------
>> >> >>> 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]
>> >>
>> >>
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>

Reply via email to