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

arg*_*g20 5 jsf children composite-component jsf-2

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

<composite:insertChildren />
Run Code Online (Sandbox Code Playgroud)

其中插入了所有组件的子项.有没有办法知道该组件是否有孩子?就像一个可以在"呈现"属性上进行的布尔值.

Arj*_*jms 7

您所追求的基本表达如下:

#{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>
Run Code Online (Sandbox Code Playgroud)

用于以下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>
Run Code Online (Sandbox Code Playgroud)

将打印Children: 2.

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


Art*_*hny 6

我遇到了同样的问题,并设法在其中找到复合组件的子项'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();
...
Run Code Online (Sandbox Code Playgroud)

在JSF中它是这样的:

#{component.getFacets().get("javax.faces.component.COMPOSITE_FACET_NAME").children}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.