我正在编写一个复合组件,你有一个名为:
的特殊标签<composite:insertChildren />
在那里插入所有组件的子项。有没有办法知道该组件是否有孩子?就像一个可以在“渲染”属性上进行的布尔值。
答案 0 :(得分:7)
您所遵循的基本表达如下:
#{cc.childCount}
或更精心制作:
#{component.getCompositeComponentParent(component).childCount}
E.g。以下复合组件:
<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}
将告诉您复合组件是否有子项。
答案 1 :(得分: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();
...
在JSF中,它类似于:
#{component.getFacets().get("javax.faces.component.COMPOSITE_FACET_NAME").children}
希望它有所帮助。
答案 2 :(得分:2)
至少在Mojarra上,这不起作用。复合组件的子项插入得很好,但访问#{cc.parent}
或#{cc.children}
在2.0.2上不起作用,而#{cc.childCount}
始终在2.0.4上返回0
,无论孩子的数量。