组合不在Richfaces tabPanel中呈现

时间:2014-01-07 09:25:06

标签: java jsf richfaces

我是JSF和Richfaces的用户。我将简化有关我的问题的代码,以使事情变得更容易。 我有一个名为'mytab.xhtml'的组合定义如下:

<cc:interface>
    <cc:attribute name="header" required="true"/>
</cc:interface>
<cc:implementation>
    <rich:tab id="my-tab" header="#{cc.attrs.header}" >
        <cc:insertChildren />
    </rich:tab>
</cc:implementation>

此组合用于另一个xhtml文件,如下所示:

<rich:tabPanel id="tp" switchType="ajax" headerPosition="top" >
     <ic:mytab id="tab1" header="header1">
          <h:outputText>content1</h:outputText>
     </ic:mytab>
     <ic:mytab id="tab2" header="header2">
          <h:outputText>content1</h:outputText>
     </ic:mytab>
</rich:tabPanel>

但很奇怪,标签根本没有呈现。 要找到原因,如果我在组合定义文件中添加outputText,如下所示:

<cc:interface>
    <cc:attribute name="header" required="true"/>
</cc:interface>
<cc:implementation>
        <h:outputText>#{cc.attrs.header}</h:outputText>
    <rich:tab id="my-tab" header="#{cc.attrs.header}" >
        <cc:insertChildren />
    </rich:tab>
</cc:implementation>

将渲染outputText,但不会渲染制表符。

或者,如果我直接将其中一个标签更改为richfaces标签:

<rich:tabPanel id="tp" switchType="ajax" headerPosition="top" >
     <ic:mytab id="tab1" header="header1">
          <h:outputText>content1</h:outputText>
     </ic:mytab>
     <rich:tab id="tab2" header="header2">
          <h:outputText>content1</h:outputText>
     </rich:tab>
</rich:tabPanel>

不会渲染第一个标签,但会渲染第二个标签。

谢谢你能给我任何帮助。

1 个答案:

答案 0 :(得分:2)

复合组件呈现为自己的UINamingContainer。因此,在UITabPanelUITab - 组件之间现在是一个UINamingContainer,UITab可能不知道如何处理它(顺便说一句,数据表的问题也是如此)。您可以做的是改为使用classic facelet tag