2015-07-28 55 views

回答

1

不確定是否「算法」是正確的措辭。它至少支持iteratorvisitor模式。

迭代器通過UIComponent#findComponent()(單擊鏈接查看描述搜索算法的大量javadoc)。

UIComponent found = someComponent.findComponent(clientIdExpression); 
// ... 

訪問者通過UIComponent#visitTree()UIComponent#invokeOnComponent()去。

someComponent.visitTree(VisitContext.createVisitContext(FacesContext.getCurrentInstance(), Arrays.asList(clientId), null), new VisitCallback() { 
    @Override 
    public VisitResult visit(VisitContext context, UIComponent found) { 
     // ...  
     return VisitResult.COMPLETE; 
    } 
}); 
someComponent.invokeOnComponent(FacesContext.getCurrentInstance(), clientId, new ContextCallback() { 
    @Override 
    public void invokeContextCallback(FacesContext context, UIComponent found) { 
     // ...  
    } 
}); 

無論哪種方式,someComponent可以代表UIViewRoot本身,但它基本上可以是任何你想要的父組件。