Check if your DOM hierarchy is valid, e.g. if you don't have any <div>
tag inside <span> tags.

-Matej

On Wed, Sep 10, 2008 at 10:08 PM, German Morales
<[EMAIL PROTECTED]> wrote:
> I think that we are closer to the problem now...
>
> In my case (going back to the original post), the form i'm submitting is
> inside a ModalWindow.
>
> I'm using Firebug to see the generated DOM in runtime, and i find this
> (extracted...) before calling the ModalWindow:
>
> <body>
>   <div here is all my content, even the placeholder for the modal window>
>      <form here is my root form>
>   </div>
>   <div added by wicket for the ajax debug window>
> </body>
>
> after calling the modal window:
>
> <body>
>   <div here is all my content, even the placeholder for the modal window>
>      <form here is my root form>
>   </div>
>   <div added by wicket for the ajax debug window>
>   <div added by modal window on the fly>
>      <form a second form tag for the form in my modal window>
>   </div>
> </body>
>
> I think that it's ok that the second form is rendered as form, since it does
> not have another form outside (to be rendered as div).
> The problem is that ModalWindow inserted a div outside my root form.
> Therefore Wicket.Form.serialize() must be serializing up to that second
> form.
>
> I'm looking at the live Modal window example
> http://www.wicket-library.com/wicket-examples/ajax/modal-window.1
> and i see that this behavior of adding a separated div at body level is
> "normal", not something strange in my structure.
>
> German
>
> 2008/9/10 Matej Knopp <[EMAIL PROTECTED]>
>
>> You are right. It calls Wicket.Form.serialize(form) with the nested
>> form, but the serialize method should find parent with <form> tag name
>> and serialize that.
>>
>> -Matej
>>
>>
>> On Wed, Sep 10, 2008 at 9:04 PM, German Morales
>> <[EMAIL PROTECTED]> wrote:
>> > 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]
>> >>
>> >>
>> >
>>
>> ---------------------------------------------------------------------
>> 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