[
https://issues.apache.org/jira/browse/MYFACES-3659?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13537768#comment-13537768
]
dennis hoersch commented on MYFACES-3659:
-----------------------------------------
Yes it works, thank you.
I had to do one change: Check the initial flag in DefaultFacelet because
otherwise there are ClassCastExceptions as parent isn't always UIViewRoot.
And I implemented
FaceletCompositionContext.markRelocatableResourceForDeletion() also empty.
I would propose to use UIViewRoot.JAVAX_FACES_LOCATION_PREFIX to check for the
Component resource facet instead of the raw string (which I didn't change in
the attached patch).
---
Independent question: Why is there in MyFaces always the old iterator style
used instead of the for-each-loop? As far as I know until now it is to be
converted by the compiler to the old iterator loop.
> 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: MYFACES-3659_2.diff, MYFACES-3659_2.zip,
> MYFACES-3659_3.diff, MYFACES-3659-3.patch, 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