arg*_*g20 5 jsf children composite-component jsf-2
我正在编写一个复合组件,你有一个名为的特殊标签:
<composite:insertChildren />
Run Code Online (Sandbox Code Playgroud)
其中插入了所有组件的子项.有没有办法知道该组件是否有孩子?就像一个可以在"呈现"属性上进行的布尔值.
您所追求的基本表达如下:
#{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}会告诉您复合组件是否有子项.
我遇到了同样的问题,并设法在其中找到复合组件的子项'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)
希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
4468 次 |
| 最近记录: |