Thanks for Martin Makundi suggestion. The following workaround works: Replace your form in ModalWindow with
public class ModalWindowForm<T> extends Form<T> { public ModalWindowForm(String id) { super(id); } @Override public Form<?> getRootForm() { Form<?> form = super.getRootForm(); if ((findParent(ModalWindow.class) != null) && (form.findParent(ModalWindow.class) == null)) return this; else return form; } } What is not working is placing modal window form into another page form, even a root form. German Morales-3 wrote: > > Hi again, > > jira issue added: > https://issues.apache.org/jira/browse/WICKET-1826 > > I've attached a quickstart project which shows my problem, has detailed > explanation, and also proposes 2 solutions (you must uncomment some code > to > see it working). Of course, the solutions work for my particular case, but > as you told me, it is not the way it is supposed to be. > > Meanwhile (i guess it can take a while until someone looks into it), could > you at least tell me if there could be any side effect in overriding > isInputNullable for CheckBox, DropDownChoice, and so on? (TextField > already > does it). > > Thanks again, > > German > > > 2008/9/10 Matej Knopp <matej.kn...@gmail.com> > >> On Wed, Sep 10, 2008 at 10:49 PM, German Morales >> <germanamora...@gmail.com> wrote: >> > I don't see any div inside span in my stuff (we have suffered problems >> with >> > this long ago, and we are more careful lately). >> > >> > Besides that, is it ok that the ModalWindow creates its own div at body >> > level? Isn't that the reason of my problem? >> That is intentional. I don't think that should cause you the problems. >> >> -Matej >> > >> > German >> > >> > 2008/9/10 Matej Knopp <matej.kn...@gmail.com> >> > >> >> Check if your DOM hierarchy is valid, e.g. if you don't have any <div> >> >> tag inside tags. >> >> >> >> -Matej >> >> >> >> On Wed, Sep 10, 2008 at 10:08 PM, German Morales >> >> <germanamora...@gmail.com> 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 <matej.kn...@gmail.com> >> >> > >> >> >> 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 >> >> >> <germanamora...@gmail.com> 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 <matej.kn...@gmail.com> >> >> >> > >> >> >> >> 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 >> >> >> >> <germanamora...@gmail.com> 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 <matej.kn...@gmail.com> >> >> >> >> > >> >> >> >> >> 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 >> >> >> >> >> <germanamora...@gmail.com> 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 <germanamora...@gmail.com> >> >> >> >> >> > >> >> >> >> >> >> 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 <matej.kn...@gmail.com> >> >> >> >> >> >> >> >> >> >> >> >> The link that shows the modal window must be >> >> >> AjaxButton/SubmitLink. >> >> >> >> >> >>> >> >> >> >> >> >>> -Matej >> >> >> >> >> >>> >> >> >> >> >> >>> On Tue, Sep 9, 2008 at 11:20 PM, German Morales >> >> >> >> >> >>> <germanamora...@gmail.com> 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: >> users-unsubscr...@wicket.apache.org >> >> >> >> >> >>> For additional commands, e-mail: >> users-h...@wicket.apache.org >> >> >> >> >> >>> >> >> >> >> >> >>> >> >> >> >> >> >> >> >> >> >> >> > >> >> >> >> >> >> >> >> >> >> >> >> --------------------------------------------------------------------- >> >> >> >> >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >> >> >> >> >> For additional commands, e-mail: users-h...@wicket.apache.org >> >> >> >> >> >> >> >> >> >> >> >> >> >> > >> >> >> >> >> >> >> >> >> --------------------------------------------------------------------- >> >> >> >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >> >> >> >> For additional commands, e-mail: users-h...@wicket.apache.org >> >> >> >> >> >> >> >> >> >> >> > >> >> >> >> >> >> >> --------------------------------------------------------------------- >> >> >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >> >> >> For additional commands, e-mail: users-h...@wicket.apache.org >> >> >> >> >> >> >> >> > >> >> >> >> --------------------------------------------------------------------- >> >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >> >> For additional commands, e-mail: users-h...@wicket.apache.org >> >> >> >> >> > >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >> For additional commands, e-mail: users-h...@wicket.apache.org >> >> > > -- View this message in context: http://www.nabble.com/Form-values-lost-in-combination-of-Forms-plus-ModalWindow-tp19401595p23274595.html Sent from the Wicket - User 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