AH.... not to say that I would mind if wicket would handle
reusemanager itself.. I wonder if it is there in 1.5? Hmm.. I think a
proposal should be added to the whishlist.

**
Martin

2011/8/12 Martin Makundi <martin.maku...@koodaripalvelut.com>:
> 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