2010-01-28 39 views
1

我是JSF的新手,所以我遇到很多问题。我已经解决了很多问题,但现在我在制作列的复合组件时遇到问题。jsf 2使用复合组件时的问题f:facet

这是代码:

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

我的解决方法,请参见:http://stackoverflow.com/questions/7891650/using-compositeinsertfacet-renderfacet-does-not-work-inside-tdatatable/9091313#9091313 – 2012-02-01 05:50:18

回答

0

当你在一个页面上拥有所有的JSF时它能正确显示吗?首先在单个页面上设置JSF可以帮助确保基础是正确的;在这之后,您可以将其分解为复合组件。另外,我注意到(使用JSF和Richfaces),有时你不能分开'父母'和'孩子'有时;丰富的:toolBar,它很丰富:例如,toolBarGroup需要位于同一个实际页面上。我没有和Facelets一起工作太多,所以你可能会遇到不同的情况。

祝你好运。

编辑:

尝试拉头出来的复合控制的,即:

<h:dataTable > 
    <h:column> 
     *HEADER_FACET_GOES_HERE* 
     <util:myCol /> 
    </h:column> 
</h:dataTable> 
+0

谢谢你 我尝试 当我把所有的代码在一个页面上工作的时候分开呢罚款 但同样的问题...帮助我:( – afi 2010-01-31 12:01:19

+0

我修改了我的答案,我想我应该给你现在的工作的例子。 – 2010-01-31 19:30:54

1

情况1:

dataTable只对待column控制children为列。您正在向复合控件添加复合控件dataTablecolumn

案例2:

的问题可能与在此侧面设置的事情。这些设置在父控件上的map上。您将添加header方面的控件是复合控件,而不是column

注:链接是JSF 1.2(JEE5)的东西,但原理仍然适用。

+0

非常感谢你 ,但我不明白我们必须做的,使利用我的应用程序的工作cloumn与小复合材料部件... – afi 2010-01-31 11:58:54

+0

您可能必须使用' McDowell 2010-01-31 15:23:43

+0

你在“因为没有这样的组件,你必须写一个”的含义......我阅读规范,我发现UIColumn。 请给我清楚的例子大约使复合列..谢谢你,我很抱歉,我的问题 – afi 2010-02-01 11:51:25

0

在接口中使用composite:facet并且在实现中使用composite:renderFacetcomposite: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> 

1

我不知道你是否还遵循此线程,但我们有因缺陷问题将面。 使用注释(服务器端注释<! - - - - >)开始构件内部的内容可以解决显示内容的问题。我们在那里遇到了一个方面的问题..提出额外的评论,因为第一个陈述是解决问题的方法。

亲切的问候, 的Gijs