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