Какой алгоритм используется при обходе 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 само по себе, но это может быть любой родительский компонент, который вы хотите.

Другие вопросы по тегам