At the linked thread Matej wrote about serialize the parent form of the
modal inner form on its submit. I think it would end up sending unnecessary
data back to server, since it is quite safe assume that user did not change
anything outside the modal window.

The FormComponent#inputChanged method are assuming that if the form
component is nullable it can live with the nullified rawInput. But it is not
true, it would be better assume when form input name is not set in request
parameters that there is no raw input. I tested this change on 1.4, fix the
quickstart and all tests on the wicket 1.4.

I'll give this change more test, but if you already know an potential
problem on it give me a tip.


---------- Forwarded message ----------
From: Martin Makundi <[email protected]>
Date: Mon, Jan 24, 2011 at 3:31 AM
Subject: Re: wicket nested form and modal
To: [email protected]


Here is a workaround
http://www.mail-archive.com/[email protected]/msg35946.html

**
Martin

2011/1/24 Clément Tamisier <[email protected]>:
> Hi, I have something strange with wicket 1.4 and I don't find what.
> I have 2 nested forms. The inner form (form2) is in a modal window, and
when
> I validate this form (form2) the checkbox of "main" form (form1) become
> unchecked (which is initially checked).
> to test: click on "click" and submit the form of modal window showed ->
> checkbox become unchecked.
> PS : if I uncheck my checkbox manually and retry, it's works.
> I include this this project in the mail. You can launch it with: "mvn
clean
> compile jetty:run"
> Do you have any ideas. Thank you very much.
> Clément
>
> HelloWorld.java
> public class HelloWorld extends WebPage {
> private CheckBox checkbox;
> private ModalWindow modalWindow;
> @SuppressWarnings("serial")
> public HelloWorld() {
> Form<Object> form = new Form<Object>("form1");
> add(new AjaxLink<Object>("click") {
> @Override
> public void onClick(AjaxRequestTarget target) {
> modalWindow.show(target);
> }
> });
> checkbox = new CheckBox("checkbox", new Model<Boolean>(true));
> checkbox.add(new OnChangeAjaxBehavior() {
> @Override
> protected void onUpdate(AjaxRequestTarget target) {
> System.out.println("checkbox set to :"+checkbox.getModelObject());
> }
> });
> checkbox.setOutputMarkupId(true);
> modalWindow = new ModalWindow("modal");
> SubmitPanel panel = new SubmitPanel("content", checkbox, modalWindow);
> modalWindow.setContent(panel);
> form.add(checkbox);
> form.add(modalWindow);
> form.add(new AjaxButton("submitForm") {
> @Override
> protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
> System.out.println("on submit checkbox is :"+checkbox.getModelObject());
> }
> });
> add(form);
> }
> }
>
> HelloWorld.html
> <html>
> <body>
> <form wicket:id="form1">
> <div wicket:id="modal"></div>
> <input type="checkbox" wicket:id="checkbox" />
> <input type="submit" wicket:id="submitForm" />
> </form>
> <a wicket:id="click">click</a>
> </body>
> </html>
>
> SubmitPanel.java
> public class SubmitPanel extends Panel{
> public SubmitPanel(String id, final CheckBox checkbox, final ModalWindow
> modalWindow) {
> super(id);
> Form<Object> form =new Form<Object>("form2");
> form.add(new AjaxButton("submitForm2") {
> @Override
> protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
> checkbox.setModelObject(true);
> target.addComponent(checkbox);
> modalWindow.close(target);
> }
> });
> add(form);
> }
> }
>
> SubmitPanel.html
> <wicket:panel>
> <form wicket:id="form2">
> <input type="submit" wicket:id="submitForm2" />
> </form>
> </wicket:panel>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]




-- 
Pedro Henrique Oliveira dos Santos

Reply via email to