JSF Updating Composite Component (Primefaces)

一笑奈何 提交于 2019-11-30 07:39:17

问题


I have the following UI Primefaces snippet:

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

When I try to update this item, for example like this:

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

Everything works fine.

When I move growl to a composite component however and try to call it (ie. like this):

<ez:growl/>

I get an error maessage that says:

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

My question is why are all these auto generated names being added and how can I control them so I can actually access the components to update?


回答1:


It's because composite components inherently extend from UINamingContainer (like as <h:form>, <h:dataTable>, etc) and thus prepend the client ID of their children with own ID.

To achieve your particular functional requirement, first give your composite component a fixed ID:

<ez:growl id="growl"/>

Then embed the <p:growl> in the composite component's implementation in a plain HTML container element like <div> or <span> with the composite component's client ID as element ID:

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

Now you can just use update=":growl" the usual way.



来源:https://stackoverflow.com/questions/11690635/jsf-updating-composite-component-primefaces

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!