I made a composite component, inside it is an <f:ajax> tag, and its "render" attribute is a parameter of the cc.
something like this:
...
<cc:attribute name="additionalAjaxRenderIds" type="java.lang.String"></cc:attribute>
...
<h:commandLink value="test" action="#{myBean.someAction}" id="testLink" >
<f:ajax execute="@this" render="#{cc.attrs.additionalAjaxRenderIds} "/>
</h:commandLink>
...
I use this cc inside a form, thats already in an outer naming container:
<h:form id="myForm">
...
<mycomp:myComponent id="myCC" additionalAjaxRenderIds=":#{component.namingContainer.parent.clientId}:myPanel" />
<h:panelGroup id="myPanel">
...
</h:panelGroup>
...
</h:form>
The problem is, if i write
additionalAjaxRenderIds=":#{component.namingContainer.clientId}:myPanel"
i get this error:
<f:ajax> contains an unknown id ':j_idt44:myForm:myCC:myPanel' - cannot locate it in the context of the component testLink
while if i use this (+ .parent):
additionalAjaxRenderIds=":#{component.namingContainer.parent.clientId}:myPanel"
the error is:
<f:ajax> contains an unknown id ':j_idt44:myPanel' - cannot locate it in the context of the component testLink
instead of the expected id:
':j_idt44:myForm:myPanel'
so it seems like the parent of my cc's naming container is not the form, but the outer namingcontainer
Is there any way to:
1, get the right parent (the form)
2, evaluate the EL before i pass it as a parameter (so i can pass the calculated clientId to my cc instead of the EL expression, so the component wont refer to the commandLink tag, but to the h:form in which i put my cc)
I know i could use
additionalAjaxRenderIds=":#{component.namingContainer.parent.clientId}:myForm:myPanel"
but i dont like that solution
Also, setting the form's prependId attribute to false breaks the whole component lookup (and the ajax tag too as a result)