Re: Form values lost in combination of Forms plus ModalWindow

2009-04-28 Thread Vladimir K

Thanks for Martin Makundi suggestion. The following workaround works:

Replace your form in ModalWindow with

public class ModalWindowFormT extends FormT {
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;
  }
  

Re: Form values lost in combination of Forms plus ModalWindow

2008-09-11 Thread German Morales
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 [EMAIL PROTECTED]

 On Wed, Sep 10, 2008 at 10:49 PM, German Morales
 [EMAIL PROTECTED] 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 [EMAIL PROTECTED]
 
  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 

Re: Form values lost in combination of Forms plus ModalWindow

2008-09-10 Thread German Morales
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
 

 

Re: Form values lost in combination of Forms plus ModalWindow

2008-09-10 Thread Matej Knopp
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 

Re: Form values lost in combination of Forms plus ModalWindow

2008-09-10 Thread German Morales
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: 

Re: Form values lost in combination of Forms plus ModalWindow

2008-09-10 Thread Matej Knopp
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
 

Re: Form values lost in combination of Forms plus ModalWindow

2008-09-10 Thread German Morales
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 

Re: Form values lost in combination of Forms plus ModalWindow

2008-09-10 Thread German Morales
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 

Re: Form values lost in combination of Forms plus ModalWindow

2008-09-10 Thread Matej Knopp
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
   

Re: Form values lost in combination of Forms plus ModalWindow

2008-09-10 Thread German Morales
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.

Re: Form values lost in combination of Forms plus ModalWindow

2008-09-10 Thread Matej Knopp
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,
   

Re: Form values lost in combination of Forms plus ModalWindow

2008-09-10 Thread German Morales
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?

German

2008/9/10 Matej Knopp [EMAIL PROTECTED]

 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 

Re: Form values lost in combination of Forms plus ModalWindow

2008-09-10 Thread German Morales
I have a quickstart project, should i send it privately?

2008/9/10 German Morales [EMAIL PROTECTED]

 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?


 German

 2008/9/10 Matej Knopp [EMAIL PROTECTED]

 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:
 

Re: Form values lost in combination of Forms plus ModalWindow

2008-09-10 Thread Igor Vaynberg
attach it to a jira issue please

-igor

On Wed, Sep 10, 2008 at 3:22 PM, German Morales
[EMAIL PROTECTED] wrote:
 I have a quickstart project, should i send it privately?

 2008/9/10 German Morales [EMAIL PROTECTED]

 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?


 German

 2008/9/10 Matej Knopp [EMAIL PROTECTED]

 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.
 

Re: Form values lost in combination of Forms plus ModalWindow

2008-09-10 Thread Matej Knopp
On Wed, Sep 10, 2008 at 10:49 PM, German Morales
[EMAIL PROTECTED] 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 [EMAIL PROTECTED]

 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
  

Re: Form values lost in combination of Forms plus ModalWindow

2008-09-09 Thread Matej Knopp
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]



Re: Form values lost in combination of Forms plus ModalWindow

2008-09-09 Thread German Morales
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]