在 JSF 中,为我们的 JSF 页面创建了一个 UIViewRoot。当我们遍历它的时候,是用什么算法来遍历它的呢?
问问题
136 次
1 回答
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
自身,但它基本上可以是您想要的任何父组件。
于 2015-07-29T07:13:10.753 回答