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