【问题标题】:Which algorithum is used in traversing UIViewRoot in JSF?在 JSF 中遍历 UIViewRoot 使用了哪种算法?
【发布时间】:2015-07-28 10:10:49
【问题描述】:

在 JSF 中,为我们的 JSF 页面创建了一个 UIViewRoot。我们在遍历的时候,用什么算法来遍历呢?

【问题讨论】:

  • 可以在JSF规范文档中找到
  • 我试图找到那个,但没有找到。如果您有任何参考,请与我分享。
  • 感谢 Kolossus,但您给出的是 Portlet 规范,它不包含 JSF 规范。
  • 我不确定您在看什么,但我刚刚从那个链接下载了文件,并且 zip 文件中的 PDF 上有“JSF 2.0 规范”以粗体显示

标签: jsf viewroot


【解决方案1】:

不确定“算法”是否是正确的措辞。它至少支持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 本身,但它基本上可以是你想要的任何父组件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    相关资源
    最近更新 更多