Re: Wicket 1.5 and nested forms

2012-06-13 Thread Stefan Moises
Thank you very much, Thomas, I was struggling with exactly this problem 
for a couple of hours yesterday... I think this should be changed back 
or at least be configurable in the next versions !


Cheers,
Stefan

Am 13.06.2012 17:14, schrieb Thomas Heigl:

Hello,

In case anyone else is encountering this problem when migrating from 1.4 to
1.5, I solved it by overriding delegateSubmit in my form:

public static enum SubmitOrder {

/** Submit form submitter before forms (1.5 Default) */
OUTSIDE_IN,
/** Submit form submitter after forms (1.4 Default) */
INSIDE_OUT
}

private SubmitOrder submitOrder = SubmitOrder.OUTSIDE_IN;



@Override

protected void delegateSubmit(IFormSubmitter submittingComponent) {
switch (submitOrder) {
case OUTSIDE_IN:
super.delegateSubmit(submittingComponent);
break;
case INSIDE_OUT:
super.delegateSubmit(null);
if (submittingComponent != null) {
submittingComponent.onSubmit();
}
break;
}
}


Cheers,

Thomas

On Wed, May 9, 2012 at 3:07 PM, Thomas Heigl  wrote:


Hey Martin,



WICKET-3705 links to https://issues.apache.org/jira/browse/WICKET-1894
which says that this order is changed in 1.4.15


I upgraded to Wicket 1.5 from Wicket 1.4.20 and it still has been working
with 1.4.20.

This is the way how it works in 1.5/6.x. I'm not sure why it is not

documented.

But there are different opinions about it:
https://issues.apache.org/jira/browse/WICKET-3705


I just thought about it some more and I think the new behavior is quite
counter intuitive. For instance my following usecase:

final class CompoundForm extends BaseForm  {

public CompoundSearchRequestForm(String id, final IModel  model) {
super(id, model);
  add(new BaseForm("baseForm", model));
add(new ConfigurationForm("configurationForm", model));
  add(new SettingsForm("settingsForm", model));
add(new AjaxButton("save") {
  @Override
protected void onSubmit(AjaxRequestTarget target, Form  form) {

  // do nothing ->  delegated to form's onSubmit

  }
});
}
@Override
  protected void onSubmit() {
super.onSubmit();
listener.saveModel(getModelObject());
  }
}


I moved the buttons onSubmit logic to the form's logic to mimic Wicket 1.4
behavior. This works, but the button is now pretty useless and just
triggers a form submit. In the form's onSubmit on the other hand I don't
have (direct) access to the AjaxRequestTarget so I'd have to split
functionality into the two handlers and always think about which order they
are called in.

The problems get harder if you don't have complete control over the nested
form structure. For instance, when you are using the Wizards from
wicket-extensions. They always wrap their contents in a compound form. We
use ajaxified versions of Wizards extensively and the new form submit flow
makes them very hard to use. The next/finish/previous links of the wizard
are now called before any of the actual forms inside the wizard had their
onSubmit handler called. The buttons in fact *replace* the inner form
before it has been submitted and I had to move the wizards state change
logic to onConfigure to make it work again:

@Override

public void onActiveStepChanged(IWizardStep newStep) {
  // do nothing ->  logic moved to #onConfigure to prevent replacement of
the form before validation of nested forms
}
@Override
protected void onConfigure() {
  super.onConfigure();
final IWizardStep activeStep = getActiveStep();
getForm().replace(activeStep.getView(VIEW_ID, this, this));
  getForm().replace(activeStep.getHeader(HEADER_ID, this, this));
}


I worked around these problems but I'd greatly prefer a way to configure
the form submit order somewhere. Ideally on the compound form or the ajax
button.

Thomas

On Wed, May 9, 2012 at 1:24 PM, Martin Grigorovwrote:


On Wed, May 9, 2012 at 2:22 PM, Martin Grigorov
wrote:

Hi Thomas,

On Wed, May 9, 2012 at 2:12 PM, Thomas Heigl

wrote:

Hello,

I notices a strange behavior after upgrading to Wicket 1.5. Nested

forms

are submitted in a different order.

I have structures like this:

- Compound Form

-- Subform 1
-- Subform 2
-- Subform 3
- Submit Link/Button for Compound Form


In Wicket 1.4 the order of calls to onSubmit was like this:

1. Subforms
2. Compound Form
3. Submit Link/Button

In multiple locations I had logic in the subforms' onSubmit handlers

that

do cleanup, re-attaching of models to entities etc. before my links

submit

handler is called and persists my model object.

In Wicket 1.5 the submit link's handler that I use for my main logic is
actually called before the subforms:

1. Submit Link
2. Subforms
3. Compound Form

I can fix this by moving all my compound form logic from the

link/buttons

onSubmit handler to the compound form's handler, but wanted to check

first

if this behavior is intentional?
Is this the way to do it in Wicket 1.5?

This is the way how it works in 1.5/6.x. I'm not sure why it is not

documented.

But there are different opinions about it:
https://issues.apache.org/jira/browse/WICKET-3705

WICKET-3705 links to https://issues.

Re: Wicket 1.5 and nested forms

2012-06-13 Thread Thomas Heigl
Hello,

In case anyone else is encountering this problem when migrating from 1.4 to
1.5, I solved it by overriding delegateSubmit in my form:

public static enum SubmitOrder {
> /** Submit form submitter before forms (1.5 Default) */
> OUTSIDE_IN,
> /** Submit form submitter after forms (1.4 Default) */
> INSIDE_OUT
> }
>
> private SubmitOrder submitOrder = SubmitOrder.OUTSIDE_IN;
>


@Override
> protected void delegateSubmit(IFormSubmitter submittingComponent) {
> switch (submitOrder) {
> case OUTSIDE_IN:
> super.delegateSubmit(submittingComponent);
> break;
> case INSIDE_OUT:
> super.delegateSubmit(null);
> if (submittingComponent != null) {
> submittingComponent.onSubmit();
> }
> break;
> }
> }


Cheers,

Thomas

On Wed, May 9, 2012 at 3:07 PM, Thomas Heigl  wrote:

> Hey Martin,
>
>
>> WICKET-3705 links to https://issues.apache.org/jira/browse/WICKET-1894
>> which says that this order is changed in 1.4.15
>
>
> I upgraded to Wicket 1.5 from Wicket 1.4.20 and it still has been working
> with 1.4.20.
>
> This is the way how it works in 1.5/6.x. I'm not sure why it is not
>> documented.
>> > But there are different opinions about it:
>> > https://issues.apache.org/jira/browse/WICKET-3705
>
>
> I just thought about it some more and I think the new behavior is quite
> counter intuitive. For instance my following usecase:
>
> final class CompoundForm extends BaseForm {
>> public CompoundSearchRequestForm(String id, final IModel model) {
>> super(id, model);
>>  add(new BaseForm("baseForm", model));
>> add(new ConfigurationForm("configurationForm", model));
>>  add(new SettingsForm("settingsForm", model));
>> add(new AjaxButton("save") {
>>  @Override
>> protected void onSubmit(AjaxRequestTarget target, Form form) {
>
>  // do nothing -> delegated to form's onSubmit
>>  }
>> });
>> }
>> @Override
>>  protected void onSubmit() {
>> super.onSubmit();
>> listener.saveModel(getModelObject());
>>  }
>> }
>
>
> I moved the buttons onSubmit logic to the form's logic to mimic Wicket 1.4
> behavior. This works, but the button is now pretty useless and just
> triggers a form submit. In the form's onSubmit on the other hand I don't
> have (direct) access to the AjaxRequestTarget so I'd have to split
> functionality into the two handlers and always think about which order they
> are called in.
>
> The problems get harder if you don't have complete control over the nested
> form structure. For instance, when you are using the Wizards from
> wicket-extensions. They always wrap their contents in a compound form. We
> use ajaxified versions of Wizards extensively and the new form submit flow
> makes them very hard to use. The next/finish/previous links of the wizard
> are now called before any of the actual forms inside the wizard had their
> onSubmit handler called. The buttons in fact *replace* the inner form
> before it has been submitted and I had to move the wizards state change
> logic to onConfigure to make it work again:
>
> @Override
>> public void onActiveStepChanged(IWizardStep newStep) {
>>  // do nothing -> logic moved to #onConfigure to prevent replacement of
>> the form before validation of nested forms
>> }
>> @Override
>> protected void onConfigure() {
>>  super.onConfigure();
>> final IWizardStep activeStep = getActiveStep();
>> getForm().replace(activeStep.getView(VIEW_ID, this, this));
>>  getForm().replace(activeStep.getHeader(HEADER_ID, this, this));
>> }
>
>
> I worked around these problems but I'd greatly prefer a way to configure
> the form submit order somewhere. Ideally on the compound form or the ajax
> button.
>
> Thomas
>
> On Wed, May 9, 2012 at 1:24 PM, Martin Grigorov wrote:
>
>> On Wed, May 9, 2012 at 2:22 PM, Martin Grigorov 
>> wrote:
>> > Hi Thomas,
>> >
>> > On Wed, May 9, 2012 at 2:12 PM, Thomas Heigl 
>> wrote:
>> >> Hello,
>> >>
>> >> I notices a strange behavior after upgrading to Wicket 1.5. Nested
>> forms
>> >> are submitted in a different order.
>> >>
>> >> I have structures like this:
>> >>
>> >> - Compound Form
>> >>> -- Subform 1
>> >>> -- Subform 2
>> >>> -- Subform 3
>> >>> - Submit Link/Button for Compound Form
>> >>
>> >>
>> >> In Wicket 1.4 the order of calls to onSubmit was like this:
>> >>
>> >> 1. Subforms
>> >> 2. Compound Form
>> >> 3. Submit Link/Button
>> >>
>> >> In multiple locations I had logic in the subforms' onSubmit handlers
>> that
>> >> do cleanup, re-attaching of models to entities etc. before my links
>> submit
>> >> handler is called and persists my model object.
>> >>
>> >> In Wicket 1.5 the submit link's handler that I use for my main logic is
>> >> actually called before the subforms:
>> >>
>> >> 1. Submit Link
>> >> 2. Subforms
>> >> 3. Compound Form
>> >>
>> >> I can fix this by moving all my compound form logic from the
>> link/buttons
>> >> onSubmit handler to the compound form's handler, but wanted to check
>> first
>> >> if this behavior is intentional?
>> >> Is this the way to do it in Wicket 1.5?
>> >
>> > This is the way how it works in 1.5/

Re: Wicket 1.5 and nested forms

2012-05-09 Thread Thomas Heigl
Hey Martin,


> WICKET-3705 links to https://issues.apache.org/jira/browse/WICKET-1894
> which says that this order is changed in 1.4.15


I upgraded to Wicket 1.5 from Wicket 1.4.20 and it still has been working
with 1.4.20.

This is the way how it works in 1.5/6.x. I'm not sure why it is not
> documented.
> > But there are different opinions about it:
> > https://issues.apache.org/jira/browse/WICKET-3705


I just thought about it some more and I think the new behavior is quite
counter intuitive. For instance my following usecase:

final class CompoundForm extends BaseForm {
> public CompoundSearchRequestForm(String id, final IModel model) {
> super(id, model);
> add(new BaseForm("baseForm", model));
> add(new ConfigurationForm("configurationForm", model));
> add(new SettingsForm("settingsForm", model));
> add(new AjaxButton("save") {
> @Override
> protected void onSubmit(AjaxRequestTarget target, Form form) {

// do nothing -> delegated to form's onSubmit
> }
> });
> }
> @Override
> protected void onSubmit() {
> super.onSubmit();
> listener.saveModel(getModelObject());
> }
> }


I moved the buttons onSubmit logic to the form's logic to mimic Wicket 1.4
behavior. This works, but the button is now pretty useless and just
triggers a form submit. In the form's onSubmit on the other hand I don't
have (direct) access to the AjaxRequestTarget so I'd have to split
functionality into the two handlers and always think about which order they
are called in.

The problems get harder if you don't have complete control over the nested
form structure. For instance, when you are using the Wizards from
wicket-extensions. They always wrap their contents in a compound form. We
use ajaxified versions of Wizards extensively and the new form submit flow
makes them very hard to use. The next/finish/previous links of the wizard
are now called before any of the actual forms inside the wizard had their
onSubmit handler called. The buttons in fact *replace* the inner form
before it has been submitted and I had to move the wizards state change
logic to onConfigure to make it work again:

@Override
> public void onActiveStepChanged(IWizardStep newStep) {
> // do nothing -> logic moved to #onConfigure to prevent replacement of the
> form before validation of nested forms
> }
> @Override
> protected void onConfigure() {
> super.onConfigure();
> final IWizardStep activeStep = getActiveStep();
> getForm().replace(activeStep.getView(VIEW_ID, this, this));
> getForm().replace(activeStep.getHeader(HEADER_ID, this, this));
> }


I worked around these problems but I'd greatly prefer a way to configure
the form submit order somewhere. Ideally on the compound form or the ajax
button.

Thomas

On Wed, May 9, 2012 at 1:24 PM, Martin Grigorov wrote:

> On Wed, May 9, 2012 at 2:22 PM, Martin Grigorov 
> wrote:
> > Hi Thomas,
> >
> > On Wed, May 9, 2012 at 2:12 PM, Thomas Heigl 
> wrote:
> >> Hello,
> >>
> >> I notices a strange behavior after upgrading to Wicket 1.5. Nested forms
> >> are submitted in a different order.
> >>
> >> I have structures like this:
> >>
> >> - Compound Form
> >>> -- Subform 1
> >>> -- Subform 2
> >>> -- Subform 3
> >>> - Submit Link/Button for Compound Form
> >>
> >>
> >> In Wicket 1.4 the order of calls to onSubmit was like this:
> >>
> >> 1. Subforms
> >> 2. Compound Form
> >> 3. Submit Link/Button
> >>
> >> In multiple locations I had logic in the subforms' onSubmit handlers
> that
> >> do cleanup, re-attaching of models to entities etc. before my links
> submit
> >> handler is called and persists my model object.
> >>
> >> In Wicket 1.5 the submit link's handler that I use for my main logic is
> >> actually called before the subforms:
> >>
> >> 1. Submit Link
> >> 2. Subforms
> >> 3. Compound Form
> >>
> >> I can fix this by moving all my compound form logic from the
> link/buttons
> >> onSubmit handler to the compound form's handler, but wanted to check
> first
> >> if this behavior is intentional?
> >> Is this the way to do it in Wicket 1.5?
> >
> > This is the way how it works in 1.5/6.x. I'm not sure why it is not
> documented.
> > But there are different opinions about it:
> > https://issues.apache.org/jira/browse/WICKET-3705
>
> WICKET-3705 links to https://issues.apache.org/jira/browse/WICKET-1894
> which says that this order is changed in 1.4.15
>
> >
> >>
> >> Cheers,
> >>
> >> Thomas
> >
> >
> >
> > --
> > Martin Grigorov
> > jWeekend
> > Training, Consulting, Development
> > http://jWeekend.com
>
>
>
> --
> Martin Grigorov
> jWeekend
> Training, Consulting, Development
> http://jWeekend.com
>
> -
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>


Re: Wicket 1.5 and nested forms

2012-05-09 Thread Martin Grigorov
On Wed, May 9, 2012 at 2:22 PM, Martin Grigorov  wrote:
> Hi Thomas,
>
> On Wed, May 9, 2012 at 2:12 PM, Thomas Heigl  wrote:
>> Hello,
>>
>> I notices a strange behavior after upgrading to Wicket 1.5. Nested forms
>> are submitted in a different order.
>>
>> I have structures like this:
>>
>> - Compound Form
>>> -- Subform 1
>>> -- Subform 2
>>> -- Subform 3
>>> - Submit Link/Button for Compound Form
>>
>>
>> In Wicket 1.4 the order of calls to onSubmit was like this:
>>
>> 1. Subforms
>> 2. Compound Form
>> 3. Submit Link/Button
>>
>> In multiple locations I had logic in the subforms' onSubmit handlers that
>> do cleanup, re-attaching of models to entities etc. before my links submit
>> handler is called and persists my model object.
>>
>> In Wicket 1.5 the submit link's handler that I use for my main logic is
>> actually called before the subforms:
>>
>> 1. Submit Link
>> 2. Subforms
>> 3. Compound Form
>>
>> I can fix this by moving all my compound form logic from the link/buttons
>> onSubmit handler to the compound form's handler, but wanted to check first
>> if this behavior is intentional?
>> Is this the way to do it in Wicket 1.5?
>
> This is the way how it works in 1.5/6.x. I'm not sure why it is not 
> documented.
> But there are different opinions about it:
> https://issues.apache.org/jira/browse/WICKET-3705

WICKET-3705 links to https://issues.apache.org/jira/browse/WICKET-1894
which says that this order is changed in 1.4.15

>
>>
>> Cheers,
>>
>> Thomas
>
>
>
> --
> Martin Grigorov
> jWeekend
> Training, Consulting, Development
> http://jWeekend.com



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com

-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org



Re: Wicket 1.5 and nested forms

2012-05-09 Thread Martin Grigorov
Hi Thomas,

On Wed, May 9, 2012 at 2:12 PM, Thomas Heigl  wrote:
> Hello,
>
> I notices a strange behavior after upgrading to Wicket 1.5. Nested forms
> are submitted in a different order.
>
> I have structures like this:
>
> - Compound Form
>> -- Subform 1
>> -- Subform 2
>> -- Subform 3
>> - Submit Link/Button for Compound Form
>
>
> In Wicket 1.4 the order of calls to onSubmit was like this:
>
> 1. Subforms
> 2. Compound Form
> 3. Submit Link/Button
>
> In multiple locations I had logic in the subforms' onSubmit handlers that
> do cleanup, re-attaching of models to entities etc. before my links submit
> handler is called and persists my model object.
>
> In Wicket 1.5 the submit link's handler that I use for my main logic is
> actually called before the subforms:
>
> 1. Submit Link
> 2. Subforms
> 3. Compound Form
>
> I can fix this by moving all my compound form logic from the link/buttons
> onSubmit handler to the compound form's handler, but wanted to check first
> if this behavior is intentional?
> Is this the way to do it in Wicket 1.5?

This is the way how it works in 1.5/6.x. I'm not sure why it is not documented.
But there are different opinions about it:
https://issues.apache.org/jira/browse/WICKET-3705

>
> Cheers,
>
> Thomas



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com

-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org