It must be manhandled. I am not sure though, if it can be automated. A
wizard is almost like that, but again, you canot assume all user
interactions to be same. However, it would be nice to maybe register
components to a conversation-scoped reuseManager instead of handling
all that on a case-by-case basis.

**
Martin

2011/8/12 Bruno Borges <[email protected]>:
> I don't think so.
>
> Its nature already provides that.
>
> Just keep an object instantiated somewhere.
>
> *Bruno Borges*
> www.brunoborges.com.br
> +55 21 76727099
>
>
>
> On Fri, Aug 12, 2011 at 10:21 AM, Martin Makundi <
> [email protected]> wrote:
>
>> I think wicket needs some sort of "conversation" scope like Seam
>> does... that should cover it.
>>
>> **
>> Martin
>>
>> 2011/8/12 Mike Mander <[email protected]>:
>> > But if wicket should support it out of the box there is maybe another
>> way.
>> > If we could get a method onBeforeFormSubmit() in form there would be
>> > an access point to configure validators in all childs.
>> > In default nothing is to do - means leave form as configured at creation
>> > time.
>> > If it's nessecary i could set a flag or something to validate components
>> > conditional.
>> >
>> > Form.java
>> > ...
>> >
>> > protected void onBeforeFormSubmit() {
>> >  if (findSubmittingButton.getId().equals("mySpecialButton")) {
>> >    setGlobalFlag(true);
>> >  } else {
>> >    setGlobalFlag(false);
>> >  }
>> > }
>> >
>> > and in Validator
>> > MyValidator.java
>> > void validate(IValidatable<T> validatable) {
>> >  if (!getGlobalFlag()) {
>> >    doValidation();
>> >  }
>> > }
>> >
>> > That would make it possibly unnessecary to store the component references
>> in
>> > session.
>> > Or are there other usecases i don't see for ReuseManager.
>> >
>> >> 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<[email protected]>:
>> >>>
>> >>> 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<[email protected]>:
>> >>>>
>> >>>> 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<[email protected]>:
>> >>>>>>
>> >>>>>> 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<[email protected]>
>> >>>>>>>  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<[email protected]
>> >
>> >>>>>>>>> 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<
>> [email protected]>
>> >>>>>>>>>>> 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<
>> [email protected]>
>> >>>>>>>>>>>> For additional commands, e-mail: [email protected]
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>  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<
>> [email protected]>
>> >>>>>>>>>> For additional commands, e-mail: [email protected]
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>  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<
>> [email protected]>
>> >>>>>>>> For additional commands, e-mail: [email protected]
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>
>> ---------------------------------------------------------------------
>> >>>>>> 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]
>> >>>>>
>> >>>>>
>> >>>>
>> >>>> ---------------------------------------------------------------------
>> >>>> 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]
>> >>
>> >>
>> >
>> >
>> > ---------------------------------------------------------------------
>> > 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]
>>
>>
>

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

Reply via email to