JSF更新复合组件(Primefaces)

时间:2012-07-27 15:10:22

标签: jsf primefaces composite-component

我有以下UI Primefaces片段:

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

当我尝试更新此项时,例如:

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

一切正常。

当我将咆哮移动到复合组件然后尝试调用它时(即像这样):

<ez:growl/>

我收到错误消息,说:

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

我的问题是为什么要添加所有这些自动生成的名称以及如何控制它们以便我可以实际访问要更新的组件?

1 个答案:

答案 0 :(得分:14)

这是因为复合组件固有地从UINamingContainer扩展(如<h:form><h:dataTable>等),因此会为其子级的客户端ID添加自己的ID。

要实现您的特定功能要求,请首先为复合组件提供固定ID:

<ez:growl id="growl"/>

然后将<p:growl>嵌入到复合组件的实现中,在<div><span>这样的纯HTML容器元素中,复合组件的客户端ID作为元素ID:

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

现在你可以按常规方式使用update=":growl"