I've created an issue: https://issues.apache.org/jira/browse/WICKET-6455

On Mon, Aug 21, 2017 at 5:43 PM, Andrea Del Bene <[email protected]>
wrote:

> To avoid changing wantSubmitOnParentFormSubmit visibility we can use
> isSubmitted to check if the target form has been submitted:
>
>     @Override
>     protected void onEvent(final AjaxRequestTarget target)
>     {
>         AjaxFormSubmitBehavior.AjaxFormSubmitter submitter = new
> AjaxFormSubmitBehavior.AjaxFormSubmitter(this, target);
>         Form<?> form = getForm();
>
>         form.getRootForm().onFormSubmitted(submitter);
>
>         if (!form.isSubmitted())
>         {
>             form.onFormSubmitted(submitter);
>         }
>     }
>
> On Mon, Aug 21, 2017 at 1:22 PM, Vit Rozkovec <[email protected]>
> wrote:
>
>> Hi,
>> this may be a naive solution that I did not have the time to test yet,
>> but wouldn't this change make at least inner form ajax-submit enabled?
>>
>>     @Override
>>     protected void onEvent(final AjaxRequestTarget target)
>>     {
>>         Form<?> form = getForm();
>>         if(!form.wantSubmitOnParentFormSubmit())
>>             form.onFormSubmitted(new 
>> AjaxFormSubmitBehavior.AjaxFormSubmitter(this,
>> target));
>>         form.getRootForm().onFormSubmitted(new
>> AjaxFormSubmitBehavior.AjaxFormSubmitter(this, target));
>>     }
>>
>> It would mean to make Form's wantSubmitOnParentFormSubmit() public,
>> though.
>> The point is to mark inner form as submitted via markFormsSubmitted()
>> that is private at the moment, so then in root form's onFormSubmitted >
>> formToProcess.process(submitter) > delegateSubmit(submittingComponent) >
>> Visits.visitPostOrder(...) the inner form is collected and inner form's
>> onSubmit is called.
>>
>> Vit
>>
>> On 08/21/2017 11:35 AM, Andrea Del Bene wrote:
>>
>>> Hi,
>>>
>>> this is somehow related to WICKET-6041
>>> <https://issues.apache.org/jira/browse/WICKET-6041>. Unfortunately we
>>> couldn't find a solution for this old issue.
>>>
>>> On Mon, Aug 21, 2017 at 12:55 AM, Vit Rozkovec <[email protected]>
>>> wrote:
>>>
>>> Hi,
>>>>
>>>> I think I have discovered a bug where inner form, when set
>>>> wantSubmitOnParentFormSubmit() to false, does not get submitted when
>>>> used
>>>> with AjaxButton. Normal SubmitLink works.
>>>>
>>>> Please see attached quickstart for demonstration.
>>>>
>>>> I believe the problem is in Form's onFormSubmitted(IFormSubmitter
>>>> submitter) and markFormsSubmitted()
>>>>
>>>> When used with Ajax, onFormSubmitted gets called for parent form in
>>>> AjaxFormSubmitBehavior:
>>>>
>>>> *    @Override*
>>>> *    protected void onEvent(final AjaxRequestTarget target)*
>>>> *    {*
>>>> *        getForm().getRootForm().onFormSubmitted(new
>>>> AjaxFormSubmitBehavior.AjaxFormSubmitter(this, target));*
>>>> *    }*
>>>>
>>>> onFormSubmitted calls markFormsSubmitted but this implementation:
>>>>
>>>> *    private void markFormsSubmitted()*
>>>> *    {*
>>>> *        setFlag(FLAG_SUBMITTED, true);*
>>>>
>>>> *        visitChildren(Form.class, new IVisitor<Component, Void>()*
>>>> *        {*
>>>> *            @Override*
>>>> *            public void component(final Component component, final
>>>> IVisit<Void> visit)*
>>>> *            {*
>>>> *                Form<?> form = (Form<?>)component;*
>>>> *                if (form.wantSubmitOnParentFormSubmit() &&
>>>> form.isEnabledInHierarchy() && form.isVisibleInHierarchy())*
>>>> *                {*
>>>> *                    form.setFlag(FLAG_SUBMITTED, true);*
>>>> *                    return;*
>>>> *                }*
>>>> *                visit.dontGoDeeper();*
>>>> *            }*
>>>> *        });*
>>>> *    }*
>>>>
>>>> skips the inner form with wantSubmitOnParentFormSubmit set to false.
>>>>
>>>> Further down the road delegateSubmit collects forms that have been
>>>> submitted, but as this inner form was skipped and flag was not set, it
>>>> does
>>>> not call form's onSubmit method.
>>>>
>>>> My use case is having one large form and ajax subform that works as
>>>> add/list comments form for parent large form.
>>>>
>>>> Am I missing something?
>>>>
>>>> Thanks for looking into it.
>>>>
>>>> Vit
>>>>
>>>>
>>
>

Reply via email to