Hi Martin

Yes, it is necessary to compare the full client id. Really that
part of the algorithm is the same as UIComponent.invokeOnComponent,
but without propagate the callback to the children.

regards,

Leonardo

2010/4/25 Martin Marinschek <mmarinschek@apache.org>
Hi Leonardo,

yes, certainly this needs to be doable as well. For performance
reasons - is it really necessary to compare the full client-id?

best regards,

Martin

On Fri, Apr 23, 2010 at 7:52 PM, Leonardo Uribe <lu4242@gmail.com> wrote:
> Hi
>
> Looking some jsf 2.0 code, I notice the current algorithm of
> UIData.invokeOnComponent cannot handle the case when the target is a
> UIColumn instance and no rowIndex is on clientId. Is that ok?
>
> Checking the new visit tree api, UIData.visitTree cleary says:
>
> "....If this component has children, for each UIColumn child:
>
> Call VisitContext.invokeVisitCallback(javax.faces.component.UIComponent,
> javax.faces.component.visit.VisitCallback) on that UIColumn instance. If
> such a call returns true, terminate visiting and return true from this
> method.
>
> If the child UIColumn has facets, call
> UIComponent.visitTree(javax.faces.component.visit.VisitContext,
> javax.faces.component.visit.VisitCallback) on each one....."
>
> I think we should do something like this:
>
>                 for (Iterator<UIComponent> itChildren =
> this.getChildren().iterator();
>                         !returnValue && itChildren.hasNext();)
>                 {
>                     UIComponent child = itChildren.next();
>                     if (child instanceof UIColumn &&
> clientId.equals(child.getClientId()))
>                     {
>                         try {
>                             callback.invokeContextCallback(context, child);
>                         } catch (Exception e) {
>                             throw new FacesException(e);
>                         }
>                         returnValue = true;
>                     }
>                     // process the child's facets
>                     for (Iterator<UIComponent> itChildFacets =
> child.getFacets().values().iterator();
>                             !returnValue && itChildFacets.hasNext();)
>                     {
>                         //recursive call to find the component
>                         returnValue =
> itChildFacets.next().invokeOnComponent(context, clientId, callback);
>                     }
>                 }
>
> Does that sounds reasonable? Should be fixed on 1.2.x branch too?
>
> regards,
>
> Leonardo Uribe
>
>



--

http://www.irian.at

Your JSF powerhouse -
JSF Consulting, Development and
Courses in English and German

Professional Support for Apache MyFaces