Digging in a little deeper, I learned that if my data comes from the forms
model (which is not how I’m currently doing things), and then create a new
model, everything works as I’d expect.

So in my case, I have a bunch of FormComponents that use a PropertyModel to
do their work.  Rather than visiting all of the FormComponents and calling
modelChanged() is there a better way to do this?  I’m not so keen on
CompoundPropertyModel (although I can’t articulate why yet :P)…probably
because I may have more than one model for a given page.

So I’m thinking of a nested model for my object(s) storing them in ivars,
and then replacing those when I show.  I’m just not sure if there’s an
existing class that will let me use a model as a basis for another model
(not that that seems hard to write).  So I’m looking for what others are
doing.

Thanks!

-Lon

On Wed, Jun 21, 2017 at 1:04 PM, Lon Varscsak <lon.varsc...@gmail.com>
wrote:

> Yeah, I had convinced myself on the way home that it was a feature
> too…until I thought about the model data having changed.
>
> So I looked into the form.clearInput() (thanks for that tip) and the model
> object is in a particular state that has field is hidden at the time I do
> the clear.  So it’s that my model object has changed and my UI doesn’t
> reflect the current state (because of this feature) once they make the
> field visible.
>
> It just feels like a little bit of an odd case (not that I know how it
> would be better).  I guess I’ll switch to not reusing the component (which
> is fine), I just think I’m going to bit by this more than once. :)
>
> -Lon
>
> On Wed, Jun 21, 2017 at 10:44 AM, Sven Meier <s...@meiers.net> wrote:
>
>> Hi,
>>
>> if you reuse a component after a submit with validation errors, you'll
>> have to reset all form components.
>> Otherwise the form components will render their previous invalid input -
>> this is an intended feature, to give the user the ability to edit his
>> previous input.
>>
>> Calling clearInput() on the form itself has no impact (which also
>>> surprised me).
>>>
>>
>> That surprises me too, as this should work. Please check
>> Form#clearInput()'s source: your components have to be visible, otherwise
>> this call does nothing.
>>
>> Have fun
>> Sven
>>
>>
>>
>> Am 21.06.2017 um 19:29 schrieb Lon Varscsak:
>>
>>> I have a scenario where I have a form and the user puts in a bad value in
>>> FieldA, and then also puts in proper values in FieldB and FieldC.  FieldB
>>> and FieldC never receive their values (in the model object), I’m assuming
>>> because the form processing stops at the error for FieldA.  The user
>>> dismisses the model (which just makes the component not visible and does
>>> an
>>> Ajax refresh).
>>>
>>> The user then goes in to edit the data again (same component, just made
>>> visible and refreshed with an Ajax request).  Before the panel is shown
>>> the
>>> underlying model object is swapped out with a new one (that has no values
>>> in all 3 fields), however, when it appears the data is as it was
>>> previously, including the unsaved values in FieldB and FieldC (from the
>>> first pass).
>>>
>>> This surprised me a bit (not that I’m anywhere near a wicket expert), I
>>> would have assumed that since the model object changed that the form
>>> components would refresh.  So in hacking around, I found that if I visit
>>> all the FormComponents and call clearInput() on them, the form will
>>> display
>>> the correct values (blank in this case).  Calling clearInput() on the
>>> form
>>> itself has no impact (which also surprised me).
>>>
>>> What’s the proper way to handle this case? I feel like while I have a
>>> working case, it’s a little clunky.
>>>
>>> -Lon
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>> For additional commands, e-mail: users-h...@wicket.apache.org
>>
>>
>

Reply via email to