Acquire full prefix for a component clientId inside naming containers with JSF 2.0

Viewed 10858

I am updating a component via AJAX in JSF:

<h:form>
    <h:outputLink>Click me
        <f:ajax event="click" render=":messages" />
    </h:outputLink>
</h:form>

<h:messages id="messages" globalOnly="true" />

As the <h:messages /> resides outside <h:form /> I have to prefix the ID with colon (:). This works.

However, if I put this same code into a component and include that component into my page, the code fails. The reason is that :messages declaration refers to the root of the component hierarchy, while the <h:messages /> component that I want to update actually resides under my custom component, which resides under the page (so the location is of style :myComponent:messages.

Inside my component, how can I achieve the correct prefix to the <h:messages /> component? I know that I can manually assign ID to my component, and use that to prefix the reference (like :#{cc.attrs.id}:messages). However, I don't know at which level of component hierarchy this component lies, so the required prefix might even be something like :foo:bar:x:y:messages.

2 Answers
Related