我正在编写一个复合组件,您有一个名为:
<composite:insertChildren />
它将所有组件的子项插入那里。有没有办法知道组件是否有孩子?就像可以在“渲染”属性上进行的布尔值一样。
我正在编写一个复合组件,您有一个名为:
<composite:insertChildren />
它将所有组件的子项插入那里。有没有办法知道组件是否有孩子?就像可以在“渲染”属性上进行的布尔值一样。
您所追求的基本表达式如下:
#{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}
将告诉您复合组件是否有子组件。
我遇到了同样的问题,并设法在它的方面“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}
希望能帮助到你。
至少在 Mojarra 上这是行不通的。复合组件的子组件可以很好地插入,但在 2.0.2 上访问#{cc.parent}
或#{cc.children}
不起作用,并且无论子组件的数量如何,#{cc.childCount}
总是在 2.0.4 上返回。0