Какой алгоритм используется при обходе UIViewRoot в JSF?
В JSF для нашей страницы JSF создается UIViewRoot. Когда мы пересекаем его, какой алгоритм используется для его прохождения?
1 ответ
Не уверен, что "алгоритм" является правильной формулировкой. По крайней мере, он поддерживает шаблоны итераторов и посетителей.
Итератор проходит через 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
само по себе, но это может быть любой родительский компонент, который вы хотите.