【发布时间】:2014-01-07 09:25:05
【问题描述】:
我是 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>
但是很奇怪的是tab根本没有渲染。 要找到原因,如果我在合成定义文件中添加一个 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>
将渲染输出文本,但不渲染选项卡。
或者,如果我直接将其中一个选项卡更改为 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>
第一个选项卡不会被渲染,但第二个选项卡会被渲染。
如果你能给我任何帮助,谢谢。
【问题讨论】:
-
当你说没有渲染你的意思是没有生成HTML?
-
谢谢@Andrei,是的,没有生成与
rich:tab相关的HTML代码。 -
你从哪里得知
id="#{cc.attrs.id}"的废话?这真的没有任何意义,并且可能只会引起麻烦和混乱。只需给它一个固定 ID,该 ID 在<cc:implementation>本身内是唯一的! -
嗨@BalusC,感谢您的回复。我刚才试过你的方法,把
id="{cc.attrs.id}"换成一个固定的唯一ID,但是很抱歉问题没有解决。请问我是不是误解了你的回答?无论如何,它一直发生在我身上 - 如果我将rich:tab包装在一个合成中,并将合成插入到一个rich:tabPanel中,该选项卡将不会呈现为选项卡面板的选项卡。我认为下面@L-Ray 的答案是对的。 -
这不是答案,而是评论。请在评论中回答问题。