我是JSF的新手,所以我遇到了很多问题。我解决了很多问题,但是现在我制作列的复合组件时遇到了问题。
这是代码:
myPage.xhtml
:
<h:dataTable >
<util:myCol />
</h:dataTable>
myCol.xhtml
:
<composite:interface>
</composite:interface>
<composite:implementation>
<h:column>
<f:facet name="header" >
<h:outputText value="user name" />
</f:facet>
<h:outputText value="some data" />
</h:column>
</composite:implementation>
问题是列不呈现。
所以我在代码中改了一点:
myPage.xhtml
:
<h:dataTable >
<h:column>
<util:myCol />
</h:column>
</h:dataTable>
myCol.xhtml
:
<composite:interface>
</composite:interface>
<composite:implementation>
<f:facet name="header" >
<h:outputText value="user name" />
</f:facet>
<h:outputText value="some data" />
</composite:implementation>
此处列呈现,但标题“用户名”不会出现。
如何解决问题?提前谢谢。
答案 0 :(得分:1)
案例1:
dataTable
仅将column
控件children视为列。您要将复合控件添加到dataTable
,将column
添加到复合控件。
案例2:
问题可能与设置方面的位置有关。这些是在父控件的map上设置的。您要添加header
构面的控件是复合控件,而不是column
。
注意:链接是针对JSF 1.2(JEE5)的东西,但原则仍然适用。
答案 1 :(得分:1)
我不知道您是否仍然关注此主题,但由于错误导致插入facet时出现问题。 使用注释(服务器端注释&lt;! - - - &gt;)启动构面内的内容可以解决显示内容的问题。我们遇到了一个问题,其中有一个衬里的facet ..添加一个额外的注释,因为第一个语句是该问题的解决方法。
亲切的问候, 的Gijs
答案 2 :(得分:0)
当您在一个页面上拥有所有JSF时,它是否正确呈现?首先在单个页面上设置JSF有助于确保基础知识是正确的;在此之后,您可以将其分解为复合组件。
另外,我注意到(使用JSF和Richfaces),有时候你不能将“父母”和“孩子”分开;富有:toolBar,它很丰富:例如,toolBarGroup需要在同一个实际页面上。我没有使用Facelets,所以你可能会遇到不同的情况。
祝你好运。
修改强>
尝试从复合控件中拉出标题,即:
<h:dataTable >
<h:column>
*HEADER_FACET_GOES_HERE*
<util:myCol />
</h:column>
</h:dataTable>
答案 3 :(得分:0)
在界面中使用composite:facet
,在实施中使用composite:renderFacet
或composite:insertFacet
。
<composite:interface>
<composite:facet name="foo"/>
<composite:attribute name="value"/>
</composite:interface>
<composite:implementation>
<h:inputText id="value" value="#{cc.attrs.value}"/>
<composite:renderFacet name="foo"/>
<composite:insertChildren/>
</composite:implementation>