myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Leonardo Uribe (JIRA)" <...@myfaces.apache.org>
Subject [jira] [Commented] (MYFACES-3520) False evaluation of variables/params with the same name (c:forEach "var" and "varStatus" should be page scoped)
Date Fri, 15 Jun 2012 13:35:42 GMT

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

Leonardo Uribe commented on MYFACES-3520:
-----------------------------------------

Patch attached with junit tests. See related discussion in:

http://markmail.org/message/k2oytkqoi6q4uu7i?q=MYFACES-3520

[core] fix c:forEach var and varStatus scope (MYFACES-3520)
                
> False evaluation of variables/params with the same name (c:forEach "var" and "varStatus"
should be page scoped)
> ---------------------------------------------------------------------------------------------------------------
>
>                 Key: MYFACES-3520
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3520
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 2.1.6
>            Reporter: dennis hoersch
>            Assignee: Leonardo Uribe
>         Attachments: MYFACES-3520-1.patch
>
>
> I have an scenario where an xhml is included. The included file has a parameter with
the same name as some outer variable. In the included file the parameter is ignored and the
outer variable is used. 
> Some xhtml:
> <c:forEach var="item" begin="1" end="3">
>     <div>
>         <ui:include src="templateContextTestInclude.xhtml">
>             <ui:param name="item" value="#{item + 10}" />
>         </ui:include>    
>     </div>
> </c:forEach> 
> templateContextTestInclude.xhtml:
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml"
>     xmlns:ui="http://java.sun.com/jsf/facelets"
>     xmlns:h="http://java.sun.com/jsf/html"
>     xmlns:f="http://java.sun.com/jsf/core"
>     xmlns:c="http://java.sun.com/jsp/jstl/core"
>     xmlns:t="http://myfaces.apache.org/tomahawk">
>     <body>
>         <ui:composition>        
>             Item: <h:outputText value="#{item}" /><br/>       
>         </ui:composition>
>     </body>
> </html>  
> I found out that the "hierarchy" of VariableMappers is asked for a value before the 'DefaultVariableMapper'
tests the current template/page context. That was not what I expected. Is that how it should
be?
> In JSF1 it works that way.
> (If I change the VariableMapperWrapper locally to test the template/page context first
the behaviour is as I would have expected (don't know if it is the right place ;-)):
>     public ValueExpression resolveVariable(String variable)
>     {
>         
>         AbstractFaceletContext faceletContext = (AbstractFaceletContext) FacesContext.getCurrentInstance().getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
>         
>         //Check on page and template context
>         PageContext pageContext = faceletContext.getPageContext(); 
>         if (pageContext != null && pageContext.getAttributeCount() > 0)
>         {
>             if (pageContext.getAttributes().containsKey(variable))
>             {
>                 ValueExpression returnValue = pageContext.getAttributes().get(variable);
>                 if (_trackResolveVariables)
>                 {
>                     _variableResolved = true;
>                 }
>                 return returnValue;
>             }
>         }
>         
>         TemplateContext templateContext = faceletContext.getTemplateContext();
>         if (templateContext  != null && !templateContext.isParameterEmpty())
>         {
>             if (templateContext.getParameterMap().containsKey(variable))
>             {
>                 ValueExpression returnValue = templateContext.getParameter(variable);
>                 if (_trackResolveVariables)
>                 {
>                     _variableResolved = true;
>                 }
>                 return returnValue;
>             }
>         }
>         
>         ValueExpression ve = null;
>         ....
> )
> Thanks in advance,
> dennis

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message