2010-01-28 63 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