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]