2010/10/19 Leonardo Uribe <lu4242(a)gmail.com>
Hi
2010/10/19 Andy Schwartz <andy.schwartz(a)oracle.com>
The following text was added to the Pre/PostValdiateEvent API doc:
>
> When an instance of this event is passed to
>> SystemEventListener.processEvent(javax.faces.event.SystemEvent) or
>>
ComponentSystemEventListener.processEvent(javax.faces.event.ComponentSystemEvent),
>> the listener implementation may assume that the source of this event
>> instance is the UIComponent instance that is that has just been validated.
>>
>> Note that iterating components such as UIData, and form components such
>> as UIForm must publish this event after processing their children nodes in
>> UIComponent.processValidators(javax.faces.context.FacesContext).
>>
>
> Does this mean that only input, UIData and UIForm components will deliver
> these events?
>
>
I was not aware that UIData deliver these events. In my understanding it
has sense to UIForm deliver these events, because it is the container of
UIInput components, but why UIData?
The only reason I can think of is that UIData is also (potentially, anyway)
a container of inputs. But so are panels, and they, evidently, are excluded.
Why?
> If so, some concerns about this:
>
> 1. Mojarra 2.0 delivered these events for all components.
> 2. The Mojarra trunk still does this (see
> UIComponentBase.processValidators()).
> 3. This prevents mutti-component validation where a listener is
> registered on an arbitrary ancestor component.
>
> For an example of #3, see the "Multi-Component Validation" section of Core
> JavaServer Faces, 3rd ed:
>
>
>
http://my.safaribooksonline.com/9780137013968/331#X2ludGVybmFsX0ZsYXNoUmV...
>
> Note that the PostValidateEvent listener is registered on an h:panelGrid.
> With the new addition to the specification, it seems that this is no longer
> supported.
>
Yes, that code does not going to work.
At first this made sense to me: only inputs, which are the only components
that need to be validated, should fire pre/post validate events. However,
looking at mojarra, we invoke processValidations() for every component,
regardless of whether it’s an input or not.
It seems to that if we are going to call processValidations() on a
component, we should fire the associated events.
david
Leonar