2012-07-27 101 views
3

我有以下UI Primefaces片段:JSF更新複合組件(Primefaces)

<pou:growl id="growl" 
       redisplay="false" 
       showDetail="false" 
       sticky="false" /> 

當我嘗試更新此項目,例如像這樣:

<pou:commandButton value="Update" 
        update=":growl"/> 

,一切工作正常。

當我移動咆哮到然而複合成分,並嘗試調用它(即是這樣。):

<ez:growl/> 

我得到一個錯誤maessage,說:

javax.faces.FacesException: Cannot find component with identifier ":growl" referenced from "j_idt84:j_idt85:testForm:j_idt111". 

我的問題是爲什麼所有這些自動生成的名稱都被添加了,我如何控制它們以便實際訪問要更新的組件?

回答

14

這是因爲複合組件本身從UINamingContainer延伸(如<h:form>,<h:dataTable>等),因此預先爲其子代的客戶ID添加了自己的ID。

爲了實現您的特定功能需求,第一給你的複合部件的固定ID:

<ez:growl id="growl"/> 

然後,在複合材料組件的實現嵌入<p:growl>在一個普通的HTML容器元素等<div><span>與複合部件的客戶ID爲元素ID:

<cc:implementation> 
    <span id="#{cc.clientId}"> 
     <p:growl /> 
    </span> 
</cc:implementation> 

現在您可以使用通常的方式使用update=":growl"

+0

我有同樣的問題,我不明白如何應用您的答案:我有一個組件包含在另一個xhtml內部,在內。你能告訴我如何加入我的案件嗎?謝謝 ! – Ioan 2013-02-19 15:53:12

+0

@loan:你在使用複合組件嗎? (例如,您使用的是,其中'cc'來自'http:// java.sun.com/jsf/composite')。 – BalusC 2013-02-19 15:55:46

+0

不,我有一個簡單的main.xhtml,其中包含和一個,以及之一:。該表單位於內部。就這樣。它一直工作,直到我添加菜單標籤查看部分.. – Ioan 2013-02-19 15:59:14