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]
>
>

Reply via email to