在JSF2中,如何知道复合组件是否有子组件?

发布于 2024-10-17 16:28:54 字数 158 浏览 5 评论 0原文

我正在编写一个复合组件,您有一个名为:的特殊标签,

<composite:insertChildren />

它将在那里插入该组件的所有子组件。有什么方法可以知道组件是否有子组件?就像可以在“渲染”属性上使用的布尔值一样。

I'm writing a composite component, you have a special tag named:

<composite:insertChildren />

Which inserts all the component's children there. Is there any way to know whether the component has children? Like a boolean value that could go on a "rendered" attribute.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

苏别ゝ 2024-10-24 16:28:54

您需要的基本表达式如下:

#{cc.childCount} 或更详细地说:

#{component.getCompositeComponentParent(component).childCount}

例如以下组合组件:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"  
    xmlns:cc="http://java.sun.com/jsf/composite"
>
    <cc:interface/>

    <cc:implementation>             
        <h:outputText value="Children: #{cc.childCount}" />
    </cc:implementation>    
</html>

用于以下 Facelet:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"    
    xmlns:test="http://java.sun.com/jsf/composite/test"    
>

    <h:body>

        <test:myCom>
            <h:outputText value="first child" />
            <h:outputText value="second child" />
        </test:myCom>

    </h:body>
</html>

将打印 Children: 2

因此 #{cc.childCount != 0} 将告诉您复合组件是否有子组件。

The basic expression you're after is the following:

#{cc.childCount} or more elaborately:

#{component.getCompositeComponentParent(component).childCount}

E.g. the following composite component:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"  
    xmlns:cc="http://java.sun.com/jsf/composite"
>
    <cc:interface/>

    <cc:implementation>             
        <h:outputText value="Children: #{cc.childCount}" />
    </cc:implementation>    
</html>

used on the following Facelet:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"    
    xmlns:test="http://java.sun.com/jsf/composite/test"    
>

    <h:body>

        <test:myCom>
            <h:outputText value="first child" />
            <h:outputText value="second child" />
        </test:myCom>

    </h:body>
</html>

will print Children: 2.

Thus #{cc.childCount != 0} will tell you whether a composite component has children or not.

白昼 2024-10-24 16:28:54

我遇到了同样的问题,并设法在其构面“javax.faces.component.COMPOSITE_FACET_NAME”中找到复合组件的子组件。

在 Java 中是这样的:

// we are within some method of UIComponent
UIComponent childrenHolderFacet = getFacets().get("javax.faces.component.COMPOSITE_FACET_NAME");
Iterator<UIComponent> childrenIt = childrenHolderFacet.getChildren().iterator();
...

在 JSF 中是这样的:

#{component.getFacets().get("javax.faces.component.COMPOSITE_FACET_NAME").children}

希望它有帮助。

I've encountered the same problem and managed to find children of a composite component within it's facet 'javax.faces.component.COMPOSITE_FACET_NAME'.

In Java it's like this:

// we are within some method of UIComponent
UIComponent childrenHolderFacet = getFacets().get("javax.faces.component.COMPOSITE_FACET_NAME");
Iterator<UIComponent> childrenIt = childrenHolderFacet.getChildren().iterator();
...

In JSF it's something like:

#{component.getFacets().get("javax.faces.component.COMPOSITE_FACET_NAME").children}

Hope it helps.

如果没结果 2024-10-24 16:28:54

至少在 Mojarra 上这是行不通的。复合组件的子组件插入得很好,但访问 #{cc.parent}#{cc.children} 在 2.0.2 上不起作用,并且 #在 2.0.4 上,无论子项数量有多少,{cc.childCount} 始终返回 0

At least on Mojarra this does not work. A composite component's children get inserted just fine but accessing #{cc.parent} or #{cc.children} does not work on 2.0.2, and #{cc.childCount} always returns 0 on 2.0.4, regardless of the number of children.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文