在 JSF 中遍历 UIViewRoot 使用了哪种算法?
Which algorithum is used in traversing UIViewRoot in JSF?
在 JSF 中,为我们的 JSF 页面创建了一个 UIViewRoot。我们在遍历的时候,是用什么算法遍历的?
不确定 "algorithm" 是否正确。它至少支持两种 iterator and visitor 模式。
迭代器通过 UIComponent#findComponent()
(单击 link 查看描述搜索算法的大量 javadoc)。
UIComponent found = someComponent.findComponent(clientIdExpression);
// ...
访客通过 UIComponent#visitTree()
and 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
本身,但它基本上可以是您想要的任何父组件。
在 JSF 中,为我们的 JSF 页面创建了一个 UIViewRoot。我们在遍历的时候,是用什么算法遍历的?
不确定 "algorithm" 是否正确。它至少支持两种 iterator and visitor 模式。
迭代器通过 UIComponent#findComponent()
(单击 link 查看描述搜索算法的大量 javadoc)。
UIComponent found = someComponent.findComponent(clientIdExpression);
// ...
访客通过 UIComponent#visitTree()
and 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
本身,但它基本上可以是您想要的任何父组件。