Description
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
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()
}
We can commit this one because this is really a defect-fix, not an incomplicant feature.