0
在JSF中爲我們的JSF頁面創建了一個UIViewRoot。當我們遍歷它時,哪個算法用於遍歷它?在JSF中遍歷UIViewRoot時使用哪種算法?
在JSF中爲我們的JSF頁面創建了一個UIViewRoot。當我們遍歷它時,哪個算法用於遍歷它?在JSF中遍歷UIViewRoot時使用哪種算法?
不確定是否「算法」是正確的措辭。它至少支持iterator和visitor模式。
迭代器通過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
本身,但它基本上可以是任何你想要的父組件。
您可以在JSF規範文檔 – kolossus
中找到,我試圖找到,但沒有找到。如果您有任何參考,請與我分享。 – proudandhonour
https://jcp.org/aboutJava/communityprocess/final/jsr314/index.html – kolossus