I think wicket needs some sort of "conversation" scope like Seam does... that should cover it.
** Martin 2011/8/12 Mike Mander <wicket-m...@gmx.de>: > 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<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 >> >> > > > --------------------------------------------------------------------- > 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