[ 
https://issues.apache.org/jira/browse/MYFACES-3659?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13535858#comment-13535858
 ] 

dennis hoersch commented on MYFACES-3659:
-----------------------------------------

Extract the finalize/clean up for relocated components from 
finalizeForDeletion() method to DefaulFaclet sounds good and works. 
Additionally the flag faceletCompositionContextInitialized there could be used 
to do it only at the root component.

In the moment I don't see how to detect if a component is relocated other then 
in ComponentTagHandlerDelegate. As far as I can see the only place with the 
knowledge about this is in ComponentTagHandlerDelegate. I think setting the 
mark could be moved to HtmlOutputScriptHandler.onComponentPopulated() (and in 
HtmlOutputStylesheetHandler, or an abstract base class for both).

----

Setting the renderTarget flag for removed components was just 'because it is 
possible' ;-) I see that it won't work for Javascript.

----

Just because I am interested: What does it mean with the null spots into the 
state?


                
> Conditional include of scripts and stylesheets 
> -----------------------------------------------
>
>                 Key: MYFACES-3659
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3659
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 2.1.6
>         Environment: MyFaces 2.1.6, Tomahawk20 1.1.11
>            Reporter: dennis hoersch
>         Attachments: patch-MYFACES-3659.diff, patch-MYFACES-3659.zip
>
>
> I am inserting a script 'X.js' dependent on a condition (c:if). The default 
> case is to include it. If I change the underlying value within an action so 
> that the condition evaluates to false, the script is still included. Also 
> after any other following action.
> Using F5 in Firefox the page is now rendered without the script.
> The script 'X.js' was added to the view root and is never 'forgot' or 
> removed. It is the same if the script is included in a composite component. 
> In that case I even observed that the order of the scripts changes and the 
> script 'X.js' is included before other basic scripts like jQuery on which 
> 'X.js' depends.
> ----
> <h:form id="form">
>   <c:set var="sessionScope" 
> value="#{facesContext.externalContext.sessionMap}" />
>     
>   <h:commandButton value="deactivate"
>       rendered="#{empty sessionScope.__isActive_ or 
> sessionScope.__isActive_}">
>       <f:setPropertyActionListener target="#{sessionScope.__isActive_}" 
> value="#{false}" />
>   </h:commandButton>
>   <h:commandButton value="activate"
>       rendered="#{not empty sessionScope.__isActive_ and not 
> sessionScope.__isActive_}">
>       <f:setPropertyActionListener target="#{sessionScope.__isActive_}" 
> value="#{true}" />
>   </h:commandButton>
>     
>   <h:commandButton value="do nothing" />
>     
>   <h:outputScript library="js" name="jQuery.js" target="body" />
>     
>   <c:if test="#{empty sessionScope.__isActive_ or sessionScope.__isActive_}">
>     BLA
>     <h:outputScript library="js" name="X.js" target="body" />
>     </c:if>      
> </h:form>
> ----
> Am I doing something wrong? Is there another (or better) way to include 
> scripts conditionally?
> (
> If I change 'HtmlOutputScriptHandler' to set the script transient, it works 
> in the first glance, but I don't know the impact...
> @Override
> public void onComponentPopulated(FaceletContext ctx, UIComponent c, 
> UIComponent parent) {
>     super.onComponentPopulated(ctx, c, parent);
>     c.setTransient(true);
> }
> )

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to