You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Martin Kočí (JIRA)" <de...@myfaces.apache.org> on 2010/08/12 22:50:17 UTC

[jira] Commented: (MYFACES-2875) FaceletVLD.retargetMethodExpressions should preserve EL VariableMapper and FunctionMapper

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

Martin Kočí commented on MYFACES-2875:
--------------------------------------

During debugging I noticed that the same EL expression ("#{localBean.method}" from example) is created twice:

1)
ExpressionBuilder.<init>(String, ELContext) line: 112
ExpressionFactoryImpl.createValueExpression(ELContext, String, Class) line: 91	
WrappedExpressionFactory.createValueExpression(ELContext, String, Class<?>) line: 59	
TagAttributeImpl.getValueExpression(FaceletContext, Class) line: 339	
RetargetMethodExpressionRule$RetargetValueExpressionMapper.applyMetadata(FaceletContext, Object) line: 53	
MetadataImpl.applyMetadata(FaceletContext, Object) line: 45	
CompositeComponentResourceTagHandler.setAttributes(FaceletContext, Object) line: 346	
ComponentTagHandlerDelegate.apply(FaceletContext, UIComponent) line: 208	

2)
ExpressionBuilder.<init>(String, ELContext) line: 112	
ExpressionFactoryImpl.createMethodExpression(ELContext, String, Class, Class[]) line: 80	
WrappedExpressionFactory.createMethodExpression(ELContext, String, Class<?>, Class<?>[]) line: 45	
FaceletViewDeclarationLanguage.retargetMethodExpressions(FacesContext, UIComponent) line: 920	
CompositeComponentResourceTagHandler.applyNextHandler(FaceletContext, UIComponent) line: 176	
ComponentTagHandlerDelegate.apply(FaceletContext, UIComponent) line: 263	

The first one looks suspiciously - is it ok? Especially RetargetValueExpressionMapper - 'Value' vs.  'Method'.


> FaceletVLD.retargetMethodExpressions should preserve EL VariableMapper and FunctionMapper
> -----------------------------------------------------------------------------------------
>
>                 Key: MYFACES-2875
>                 URL: https://issues.apache.org/jira/browse/MYFACES-2875
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: JSR-252
>    Affects Versions: 2.0.2-SNAPSHOT
>         Environment: myfaces current trunk
>            Reporter: Martin Kočí
>         Attachments: MYFACES-2875.patch
>
>
> org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.retargetMethodExpressions calls facesContext.getELContext() but should use FaceletContext instead to preserve EL variable and function mapping. Consider this example:
> <ui:param
>         name="localBean"
>         value="#{very.long.path.to.a.bean.in.el}" />
> <a:niceCompositeComponent customMethod="#{localBean.method}" >
>  will not work but
> customMethod="#{very.long.path.to.a.bean.in.el.method} will. 
> This can be easily fixed by using ELContext elContext = (ELContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY); 
> instead of facesContext.getELContext().

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.