【发布时间】:2011-09-16 16:17:52
【问题描述】:
我只是不明白:
如果我希望我的复合组件插入子组件,我使用 <composite:insertChildren/> 但#{cc.childCount} 在这种情况下总是返回0。另一方面,如果我不使用 <composite:insertChildren/> 我总是得到正确的childCount 而不会渲染孩子。为什么会这样?
我想要在我的组件中做的就是在没有子级的情况下呈现一些“默认”面板,并且在其他情况下不呈现它 - 类似于 <ui:insert name="param_name">default value</ui:insert> 的行为。所以我需要两个似乎不能一起工作的 insertChildren 和 childCount 。
代码如下:
<my:test>
<h:outputText value="child1" rendered="#{some.trueValue}"/>
<h:outputText value="child2" rendered="#{some.trueValue}"/>
<my:test>
如果我使用下面的实现,我会得到 2 按预期呈现
<composite:implementation>
<h:outputText value="#{cc.childCount}"/>
</composite:implementation>
当使用insertChildren 时,我会渲染两个孩子,最后会渲染0:
<composite:implementation>
<composite:insertChildren/>
<h:outputText value="#{cc.childCount}"/>
</composite:implementation>
而我的目标是:
<composite:implementation>
<composite:insertChildren/>
<h:panelGroup rendered="#{cc.childCount == 0}">
some default data
</h:panelGroup>
</composite:implementation>
有什么想法/解决方法吗?
【问题讨论】:
标签: jsf jsf-2 composite-component