我只是不明白:
如果我想在复合组件中插入子代,则使用<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>


有任何想法/解决方法吗?

最佳答案

将孩子放在具有id的panelGroup中(例如,孩子)。

然后

#{component.findComponent('children').childCount}


将为您提供正确的价值。祝好运!

10-07 13:15