我是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>
不会渲染第一个标签,但会渲染第二个标签。
谢谢你能给我任何帮助。
答案 0 :(得分:2)
复合组件呈现为自己的UINamingContainer
。因此,在UITabPanel
和UITab
- 组件之间现在是一个UINamingContainer,UITab
可能不知道如何处理它(顺便说一句,数据表的问题也是如此)。您可以做的是改为使用classic facelet tag。