On Fri, Nov 20, 2015 at 4:37 PM, Sven Meier <[email protected]> wrote: > > IMO the current behavior is wrong. > > I don't see anything wrong with the current nested form handling. Care to > elaborate? >
The problem I see is that Wicket treats #inputChanged() differently than all other Form processing methods (like #validate(), #on[In]Valid(), #updateModel()). When a nested form is submitted Wicket calls the processing methods only for the nested form. I don't see a reason why #inputChanged() should be an exception. > > It's rather unusual to have to formComponents for the same model on a > single page. > > IMHO Patrick shouldn't use nested forms in the first place, I consider > them an advanced feature. > Advanced or not, it is very common to reuse components in Wicket. So a Panel with a Form could appear as a nested anywhere. That is the main reason to support nested forms. > > Regards > Sven > > > > > On 20.11.2015 16:06, Martin Grigorov wrote: > >> OK. I see what happens. >> At >> org.apache.wicket.markup.html.form.Form#onFormSubmitted(org.apache.wicket.markup.html.form.IFormSubmitter) >> Wicket calls #inputChanged() for the root form, so this calls >> #inputChanged() on *all* FormComponents (including nested ones). >> My first reaction is: this is a bug! >> But then ... the purpose of the rawInput is to preserve the data entered >> by >> the user. So if your #onSubmit() logic in the nested form / submitter >> repaints the form components in the root/parent form then their data would >> be lost and the user will have to re-type it again. >> >> It seems in both cases the application developer will have to do >> something: >> 1) either clear the input manually (as now) >> 2) or update it manually when needed (by calling #inputChanged() only on >> the FormComponents in the rootForm). >> >> IMO the current behavior is wrong. >> >> Please create a bug with a quickstart. >> >> Martin Grigorov >> Wicket Training and Consulting >> https://twitter.com/mtgrigorov >> >> On Fri, Nov 20, 2015 at 3:51 PM, Patrick Davids < >> [email protected]> wrote: >> >> Hi Martin, >>> this is true for my DropDownChoice2. >>> But DropDownChoice1 does not get validated. >>> So, this could be the reason why it is not cleared. >>> >>> Now... I'm getting more and more confused... *lol* >>> >>> >>> Page >>> Form A >>> DropDownChoice1 displaying selected 'Car 1' >>> Form B >>> DropDownChoice2 displaying selected 'Car 1' >>> >>> Patrick >>> >>> >>> >>> Am 20.11.2015 um 15:32 schrieb Martin Grigorov: >>> >>> Hi, >>>> >>>> On Fri, Nov 20, 2015 at 3:22 PM, Patrick Davids < >>>> [email protected]> wrote: >>>> >>>> Hi Sven, >>>> >>>>> >>>>> using clearInput() works. >>>>> I call it in onConfigure() of my DropDownChoice. >>>>> >>>>> Ok, so far... but I'm still confused about the raw-input-handling. >>>>> >>>>> Ususally, (and thats what I have in mind): components reflect the >>>>> current >>>>> model objects state. >>>>> >>>>> Whats the reason saving the raw-input and determining the selected >>>>> value >>>>> by raw-input and not by the model-objects value? >>>>> >>>>> >>>>> Wicket clears the rawInput >>>> at org.apache.wicket.markup.html.form.FormComponent#valid(). >>>> FormComponent#valid() is called if the validation and conversion pass >>>> successfully. >>>> You can put a breakpoint and see what happens. >>>> >>>> >>>> >>>> kind regards >>>>> Patrick >>>>> >>>>> >>>>> Am 19.11.2015 um 16:43 schrieb Sven Meier: >>>>> >>>>> Hi Patrick, >>>>> >>>>>> >>>>>> so you have two components using the same model? Interesting. >>>>>> >>>>>> Easiest solution would be to clear the rawInput on DropDownChoice1: >>>>>> >>>>>> choice1.clearInput(); >>>>>> >>>>>> If you don't have access to the dropDown from your submitting code, >>>>>> you >>>>>> might use component events to signal the car selection: >>>>>> >>>>>> (Wicket events infrastructure) >>>>>> >>>>>> >>>>>> >>>>>> https://ci.apache.org/projects/wicket/guide/6.x/guide/advanced.html#advanced_2 >>>>>> >>>>>> >>>>>> Have fun >>>>>> Sven >>>>>> >>>>>> >>>>>> On 19.11.2015 13:40, Patrick Davids wrote: >>>>>> >>>>>> Hi Wicket Pros, >>>>>> >>>>>>> >>>>>>> I have a quite special case here and a question concerning nested >>>>>>> form >>>>>>> submits and FormComponent/Raw-Input Handling. >>>>>>> >>>>>>> This is my component tree: >>>>>>> >>>>>>> Page >>>>>>> Form A >>>>>>> DropDownChoice1 displaying selected 'Car 1' >>>>>>> Form B >>>>>>> DropDownChoice2 displaying selected 'Car 1' >>>>>>> >>>>>>> The model-binding of both DropDownChoices pointing to the same member >>>>>>> of >>>>>>> the model-object of the page. >>>>>>> >>>>>>> This is my case and code flow: >>>>>>> - Someone uses DropDownChoice2 of Form B and changes the value to >>>>>>> 'Car >>>>>>> 2' >>>>>>> - Form B does a form submit >>>>>>> - Method onFormSubmitted(IFormSubmitter submitter) of Form A is also >>>>>>> called >>>>>>> - which calls inputChanged() of the DropDownChoice1 (by visiting / >>>>>>> iteration) >>>>>>> - so DropDownChoice1.inputChanged() reads and sets its rawInput to >>>>>>> the >>>>>>> current displayed value 'Car 1' >>>>>>> - after form submit is done, an ajax refresh updates Form A >>>>>>> - DropDownChoice1 re-renders an runs through its appendOptionHtml() >>>>>>> - this reads getValue(), returning 'Car 1' from its previously saved >>>>>>> rawInput >>>>>>> - after the ajax refresh is finished, Form A shows the old selected >>>>>>> 'Car >>>>>>> 1' instead of 'Car 2' >>>>>>> >>>>>>> Model-Object updates are working fine... but DropDownChoice1 does not >>>>>>> reflect it correct, due to the raw-input-handling. >>>>>>> >>>>>>> Can someone help here, please? >>>>>>> >>>>>>> Thanx a lot >>>>>>> kind regards >>>>>>> Patrick >>>>>>> >>>>>>> --------------------------------------------------------------------- >>>>>>> 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] >>>>>> >>>>>> >>>>>> >>>>>> >> > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > >
