[jsr-314-open-mirror] [jsr-314-open] Fwd: PostAddToViewEvent publishing conditions

Andy Schwartz andy.schwartz at oracle.com
Fri May 21 16:11:29 EDT 2010


Gang -

Max did some investigation into the problems that Leonardo found when 
attempting to use the TemplateClient mechanism to implement composite 
component children/facet insertion.   It looks like there are some more 
fundamental problems here.  Max captured his thoughts in the following 
Mojarra issue:

https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=1684

Please review - interesting stuff.

Note - we still think that using a TemplateClient-like approach should 
be possible for composite component insertion, so hopefully the 
implementations can continue to pursue this option.

Andy

> ---------- Forwarded message ----------
> From: Max Starets <max.starets at oracle.com>
> Date: Fri, May 21, 2010 at 3:58 PM
> Subject: Re: [jsr-314-open] PostAddToViewEvent publishing conditions
> To: jsr-314-open at jcp.org
> Cc: dev at myfaces.apache.org
>
>
> Hey Leonardo,
>
> You are right - the same issue reproduces with two nested
> ui:composition templates.
> I logged the following Mojarra issue for the problem:
> https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=1684
>
> I do not think we have to abandon the idea of using TemplateClient
> mechanism for for the composite component implementation
> because of this issue. You are already using a separate TemplateClient
> stack for composites in your patch, so we do not
> need to wait for the fix before implementing the correct behavior for
> composites. All we need is a stack with only one TemplateClient
> being considered 'current'. includeDefinition() should be checking the
> current TemplateClient only, and we should pop the current
> TemplateClient before calling TemplateClient.apply(), then restore
> (push) it when the apply() is done.
>
> Max
>
>
> Leonardo Uribe wrote:
>   
>> Hi
>>
>> I tried the proposal of use some variation of TemplateClient API (I attach it as reference on MYFACES-2638-6.patch ). The solution works for simple cases, but it does not when nested composite components are used.
>>
>> Look this example (I removed the non relevant code):
>>
>> testCompositeInsertChildren.xhtml (the page when it is used)
>>
>> <testComposite:compositeInsertChildren>
>>    <h:outputText value="GAMMA " />
>> </testComposite:compositeInsertChildren>
>>
>> testComposite:compositeInsertChildren
>>
>> <composite:implementation>
>>    <testComposite:compositeInsertChildrenInner>
>>        <h:outputText value="BETA " />
>>        <composite:insertChildren />
>>    </testComposite:compositeInsertChildrenInner>
>> </composite:implementation>
>>
>> testComposite:compositeInsertChildrenInner
>>
>> <composite:implementation>
>>    <h:outputText value="ALFA " />
>>    <composite:insertChildren/>
>>    <h:outputText value="OMEGA " />
>> </composite:implementation>
>>
>> The example should render this:
>>
>> ALFA BETA GAMMA OMEGA
>>
>> But it is rendered this:
>>
>> ALFA GAMMA OMEGA
>>
>> The current algorithm do it correctly because the tree is completely built before relocate, so the listener relocates BETA too. Facelets executed the inner FaceletHandler instance first and then the outer ones. On composite components, it executes first the composite component facelet, then the FaceletHandler children.
>>
>> Suggestions are welcome.
>>
>> regards,
>>
>> Leonardo Uribe
>>     




More information about the jsr-314-open-mirror mailing list