Hi Leonardo,
yes, ok - it is the same as the existing implementation, you are right
- but still, I think we would only need to compare the part of the
client-id which has not already been checked cause we have moved down
the component tree already. But I see that this performance
enhancement is not in the existing code, so forget my objection (or
implement it and make it a little faster ;)
Back to your original issue: I definitely agree.
best regards,
Martin
On Mon, Apr 26, 2010 at 7:31 AM, Leonardo Uribe <lu4242(a)gmail.com> wrote:
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(a)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(a)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
--
http://www.irian.at
Your JSF powerhouse -
JSF Consulting, Development and
Courses in English and German
Professional Support for Apache MyFaces