I was using c:set as expression alias. Today I encountered, that c:set is evaluated everytime var is being used and also on each "invocation" it's output changes - depends on current context:
<!-- lets say composite has id "composite" -->
<ui:composition ...>
<cc:implementation>
<c:set var="compositeClientId" value="#{component.namingContainer.clientId}"/>
<!-- OUTPUTS "composite" -->
<h:outputText value="#{compositeClientId}"/>
<h:form id="form">
<!-- OUTPUTS "composite:form" -->
<h:outputText value="#{compositeClientId}"/>
</h:form>
<cc:implementation>
</ui:composition>
Is there any way, how to evaluate c:set at declaration place so in both cases it would output "composite"?