使用f:facet时的jsf 2复合组件问题

时间:2010-01-28 14:04:31

标签: jsf java-ee

我是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>

此处列呈现,但标题“用户名”不会出现。

如何解决问题?提前谢谢。

4 个答案:

答案 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: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>