The Form way is a quirk way to do it in the first place. You are not
supposed to update model before validation etc. so you will run into
lots of troubles that way.

Reusemanager simply works like wicket normally works when you validate
and repaint the screen with rawInput values. It just keeps those
components and copies the old rawInput value which was persisted
during incomplete submit.

**
Martin

2011/8/12 Mike Mander <wicket-m...@gmx.de>:
> Thanks Martin,
>
> now it works as expected. I don't have a clue how but it is.
> I really would be interested in knowing why the reusemanager gets the data
> and the form not.
>
> I think i will start a debugging session at weekend :-)
>
> Maybe we should use this scenario and put it in the wiki? Especially in shop
> environments it's
> a big frustration point if form values is lost only because i want to see
> what i typed in last page.
> And ask the user to provide all data until validation passes is decreasing
> the conversion rate :-(
> So maybe others will benefit from the found / working solution to.
>
> Thanks again
> Mike
>
>> This is how you can do it with reusemanager:
>>
>>
>> HomePage:
>> public class HomePage extends WebPage {
>>        public HomePage(final PageParameters parameters) {
>>        Form<Void>  form;
>>                        add(form = new Form<Void>("form"));
>>
>>  form.add(WicketSession.get().getReuseManager().rememberOrReuseAndProvideFeedback(HomePage.class.getSimpleName()
>> + "tf", new TextField<String>("tf", Model.of(""))));
>>        form.add(new Button("doMemorizeInvalidData") {
>>            @Override
>>            public void onSubmit() {
>>                super.onSubmit();
>>                setResponsePage(OtherPage.class);
>>                setRedirect(true);
>>            };
>>        }.setDefaultFormProcessing(false));
>>        form.add(new Button("doUpdateData") {
>>            @Override
>>            public void onSubmit() {
>>                super.onSubmit();
>>                setResponsePage(OtherPage.class);
>>                setRedirect(true);
>>            };
>>        });
>>    }
>> }
>>
>>
>> Reusemanager holder (can be session, can be something else):
>>
>> public class WicketSession extends WebSession {
>>        /**
>>         *
>>         */
>>        private static final long serialVersionUID = 1L;
>>
>>        private final FormComponentReuseManager reuseManager = new
>> FormComponentReuseManager();
>>
>>        public FormComponentReuseManager getReuseManager() {
>>                return reuseManager;
>>        }
>>
>>        /**
>>         * @param request
>>         */
>>        public WicketSession(Request request) {
>>                super(request);
>>        }
>>
>>        /**
>>         * @return WicketSession
>>         */
>>        public static WicketSession get() {
>>                return (WicketSession) Session.get();
>>        }
>> }
>>
>>
>> **
>> Martin
>>
>> 2011/8/12 Mike Mander<wicket-m...@gmx.de>:
>>>
>>> That is not working to. I've created a quickstart for this.
>>> Scenario is simplified. HomePage gets the data and has two submit
>>> buttons.
>>> Do i press the "submit" and click back on other page data are present
>>> (submitted).
>>> Do i press the "invalid submit" and click back on other page data are
>>> lost.
>>>
>>> Here is the code
>>>
>>> DirtyForm.java
>>> <code>
>>> import org.apache.wicket.markup.html.form.Form;
>>> import org.apache.wicket.model.IModel;
>>>
>>> public class DirtyForm<T>  extends Form<T>  {
>>>
>>>    public DirtyForm(String id, IModel<T>  model) {
>>>        super(id, model);
>>>    }
>>>
>>>    public final void submitTheInvalidDataToMySession() {
>>>       //this seems not to be the complete solution
>>>       updateFormComponentModels();
>>>    }
>>> }
>>> </code>
>>>
>>> HomePage.java
>>> <code>
>>>
>>> import org.apache.wicket.PageParameters;
>>> import org.apache.wicket.markup.html.WebPage;
>>> import org.apache.wicket.markup.html.form.Button;
>>> import org.apache.wicket.markup.html.form.TextField;
>>> import org.apache.wicket.model.PropertyModel;
>>>
>>> public class HomePage extends WebPage {
>>>
>>>    public HomePage(final PageParameters parameters) {
>>>
>>>        DirtyForm<String>  form;
>>>        add(form = new DirtyForm<String>("form", new
>>> PropertyModel<String>(new PropertyModel<Object>(this, "session"),
>>> "myBusinessValue"));
>>>        form.add(new TextField<String>("tf", form.getModel()));
>>>        form.add(new Button("doMemorizeInvalidData") {
>>>            @Override
>>>            public void onSubmit() {
>>>                super.onSubmit();
>>>                DirtyForm<?>  f = findParent(DirtyForm.class);
>>>                f.submitTheInvalidDataToMySession();
>>>                setResponsePage(OtherPage.class);
>>>                setRedirect(true);
>>>            };
>>>        }.setDefaultFormProcessing(false));
>>>        form.add(new Button("doUpdateData") {
>>>            @Override
>>>            public void onSubmit() {
>>>                super.onSubmit();
>>>                setResponsePage(OtherPage.class);
>>>                setRedirect(true);
>>>            };
>>>        });
>>>    }
>>> }
>>> </code>
>>>
>>> HomePage.html
>>> <code>
>>> <html
>>>
>>> xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd";
>>> <head>
>>> <title>Wicket Quickstart Archetype Homepage</title>
>>> </head>
>>> <body>
>>> <strong>Wicket Quickstart Archetype Homepage</strong>
>>> <br/><br/>
>>> <div>
>>> <form wicket:id="form">
>>>                Value:
>>> <input type="text" wicket:id="tf" />
>>> <input type="submit" wicket:id="doMemorizeInvalidData" value="invalid
>>> submit" />
>>> <input type="submit" wicket:id="doUpdateData" value="submit" />
>>> </form>
>>> </div>
>>> </body>
>>> </html>
>>> </code>
>>>
>>> MySession.java
>>> <code>
>>> import org.apache.wicket.Request;
>>> import org.apache.wicket.protocol.http.WebSession;
>>>
>>> public class MySession extends WebSession {
>>>
>>>    private String myBusinessValue = null;
>>>
>>>    public MySession(Request request) {
>>>        super(request);
>>>    }
>>>
>>>    public void setMyBusinessValue(String myBusinessValue) {
>>>        this.myBusinessValue = myBusinessValue;
>>>    }
>>>
>>>    public String getMyBusinessValue() {
>>>        return myBusinessValue;
>>>    }
>>> }
>>> </code>
>>>
>>> OtherPage.java
>>> <code>
>>> import org.apache.wicket.markup.html.WebPage;
>>>
>>> public class OtherPage extends WebPage {
>>>
>>>    public OtherPage() {
>>>    }
>>> }
>>> </code>
>>>
>>> OtherPage.html
>>> <code>
>>> <html
>>>
>>> xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd";
>>> <head>
>>> <title>Wicket Quickstart Archetype Homepage</title>
>>> </head>
>>> <body>
>>> <strong>Wicket Quickstart Archetype Homepage</strong>
>>> <br/><br/>
>>> <a href="/">Back</a>
>>> </body>
>>> </html>
>>> </code>
>>>
>>> WicketApplication.java
>>> <code>
>>> import org.apache.wicket.Request;
>>> import org.apache.wicket.Response;
>>> import org.apache.wicket.Session;
>>> import org.apache.wicket.protocol.http.WebApplication;
>>>
>>> public class WicketApplication extends WebApplication {
>>>    @Override
>>>    public Class<HomePage>  getHomePage() {
>>>        return HomePage.class;
>>>    }
>>>
>>>    @Override
>>>    public Session newSession(Request request, Response response) {
>>>        return new MySession(request);
>>>    }
>>> }
>>> </code>
>>>
>>>> In your GoBack button's submit method (dpf = false), call
>>>>
>>>>    form.updateFormComponentModels()
>>>>
>>>>
>>>>
>>>> *Bruno Borges *
>>>> www.brunoborges.com.br
>>>> +55 21 76727099
>>>>
>>>>
>>>>
>>>> On Thu, Aug 11, 2011 at 12:08 PM, Mike Mander<wicket-m...@gmx.de>
>>>>  wrote:
>>>>
>>>>> Am 11.08.2011 16:54, schrieb Bruno Borges:
>>>>>
>>>>>> You want to go back to another page without having to fill the form,
>>>>>> but
>>>>>> you
>>>>>> also don't want to lose data you typed in in the previous screen?
>>>>>> Seems
>>>>>> weird to me.
>>>>>>
>>>>>> Have you considered to add Ajax update behaviour? onBlur of
>>>>>> components,
>>>>>> you
>>>>>> could update the model of each component.
>>>>>> *Bruno Borges*
>>>>>> www.brunoborges.com.br
>>>>>> +55 21 76727099
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Thu, Aug 11, 2011 at 11:50 AM, Mike Mander<wicket-m...@gmx.de>
>>>>>> wrote:
>>>>>>
>>>>>>  Am 11.08.2011 16:36, schrieb Bruno Borges:
>>>>>>>
>>>>>>>  Shouldn't you be submitting that button anyway? dfp = true
>>>>>>>>
>>>>>>>> *Bruno Borges*
>>>>>>>> www.brunoborges.com.br
>>>>>>>> +55 21 76727099
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thu, Aug 11, 2011 at 10:44 AM, Mike Mander<wicket-m...@gmx.de>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>  Hi,
>>>>>>>>
>>>>>>>>> i've added a domain model globally to my session.
>>>>>>>>>
>>>>>>>>> A form for editing this data is provided on page A. On this i have
>>>>>>>>> 2
>>>>>>>>> submit
>>>>>>>>> buttons. One with setDefaultFormProcessing false (to previous page)
>>>>>>>>> and
>>>>>>>>> one
>>>>>>>>> with true (to next step).
>>>>>>>>>
>>>>>>>>> If i press the main submit (next step | dfp = true) then everything
>>>>>>>>> works
>>>>>>>>> as expected. If i press the other (previous page |dfp = false) and
>>>>>>>>> redirect
>>>>>>>>> to Page A all data are lost. I'm absolutely aware of the issue that
>>>>>>>>> false
>>>>>>>>> in
>>>>>>>>> defaultFormProcessing is not submitting the data.
>>>>>>>>>
>>>>>>>>> But because i cannot reproduce the input changed part of the form
>>>>>>>>> processing, i can't submit the invalid data manually. Is there any
>>>>>>>>> way
>>>>>>>>> to
>>>>>>>>> achieve my goal?
>>>>>>>>>
>>>>>>>>> Thanks
>>>>>>>>> Mike
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ------------------------------******--------------------------**--**
>>>>>>>>> --**---------
>>>>>>>>> To unsubscribe, e-mail: users-unsubscribe@wicket.****apa**che.org<
>>>>>>>>> http://apache.org**>
>>>>>>>>> <users-unsubscribe@**wicket.**apache.org<http://wicket.apache.org><
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> users-unsubscribe@**wicket.apache.org<users-unsubscr...@wicket.apache.org>
>>>>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>  Then i can't goback to previous page without filling the form.
>>>>>>>>>
>>>>>>>> The scenario is
>>>>>>>
>>>>>>> 1. goto basket
>>>>>>> 2. goto checkout (Page A in post) enter some data
>>>>>>> 3. goback to basket (dfp = false) validation should be bypassed
>>>>>>> 4. goto checkout =>     all entered data are present
>>>>>>>
>>>>>>> But until now with this scenario i lost all data in step 4
>>>>>>>
>>>>>>> Thanks
>>>>>>> Mike
>>>>>>>
>>>>>>> PS: I use buttons to stay in javascript-less mode :-)
>>>>>>>
>>>>>>>
>>>>>>> ------------------------------****----------------------------**
>>>>>>> --**---------
>>>>>>> To unsubscribe, e-mail:
>>>>>>> users-unsubscribe@wicket.**apa**che.org<http://apache.org>
>>>>>>>
>>>>>>>
>>>>>>> <users-unsubscribe@**wicket.apache.org<users-unsubscr...@wicket.apache.org>
>>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>>>
>>>>>>>
>>>>>>>  Ajax is not an option - i have to stay javascript-less.
>>>>>
>>>>>   You want to go back to another page without having to fill the form,
>>>>> but
>>>>>>
>>>>>> you
>>>>>>  also don't want to lose data you typed in in the previous screen?
>>>>>> Seems
>>>>>>  weird to me.
>>>>>>
>>>>> Not the previous screen. The current screen.
>>>>>
>>>>> I come from basket. I goto checkout. I start typing. I think oops what
>>>>> was
>>>>> the option in basket
>>>>> and goback to basket (dfp = false). I check the basket option and think
>>>>> ok
>>>>> let's go on checkout.
>>>>> And on checkout i think - damn all typed data have gone. So i leave the
>>>>> shop.
>>>>>
>>>>> That's the scenario i try to catch.
>>>>>
>>>>>
>>>>> Thanks
>>>>> Mike
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> ------------------------------**------------------------------**---------
>>>>> To unsubscribe, e-mail:
>>>>>
>>>>> users-unsubscribe@wicket.**apache.org<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

Reply via email to