在JSF中遍历UIViewRoot时使用了哪种算法?

时间:2015-07-28 10:10:50

标签: jsf viewroot

在JSF中,为我们的JSF页面创建了一个UIViewRoot。当我们遍历它时,使用哪种算法来遍历它?

1 个答案:

答案 0 :(得分: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本身,但它基本上可以是您想要的任何父组件。