Reinhard Poetz wrote:
>
> Today I've tried to run a form that uses the widget state "INVISIBLE"
> and when the form state is saved in the request. (my experiments are
> based on the form1 action example)
>
> If I use the event framework to change the state from ACTIVE to
> INVISIBLE, toggling works, but the value of the changed widget gets lost.
>
> Looking at the samples I can't figure out ...
>
> - How can a widget have the state "INVISIBLE"? Where is this
> information stored, or better from where is it read?
Have a look at AbstractWidget.{get|set|getCombined}State() and also at
WidgetState.
> - If I'm right and the described behavior (losing the values of
> INVISIBLE widgets) is a bug, how can it be fixed? Any ideas?
If it behaves as you describe it, then yes it's a bug. A field only
reads its value when in ACTIVE state, and keeps its current value otherwise.
However, a field does read its value from the request when switched from
ACTIVE to INVISIBLE: Form.readFromRequest() traverses the whole widget
tree and buffers any event occuring during this phase and fires them
when after traversal. This is needed for the widget tree to be globally
consistent when listeners are called.
Maybe you're experiencing such a condition, i.e. the http submit that
changes to inactive state doesn't contain the appropriate parameter?
Sylvain
--
Sylvain Wallez Anyware Technologies
http://apache.org/~sylvain http://anyware-tech.com
Apache Software Foundation Member Research & Technology Director
|