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

Reply via email to