[
https://issues.apache.org/jira/browse/MYFACES-1697?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12519154
]
Bernhard Huemer commented on MYFACES-1697:
------------------------------------------
If I only had taken a look at this issue a few hours earlier, resolving this
issue would have been a lot easier. However, this bug seems to be a duplicate
of https://issues.apache.org/jira/browse/MYFACES-1670.
> Immediate EL expressions not resolved correctly
> -----------------------------------------------
>
> Key: MYFACES-1697
> URL: https://issues.apache.org/jira/browse/MYFACES-1697
> Project: MyFaces Core
> Issue Type: Bug
> Components: JSR-252
> Affects Versions: 1.2.0
> Environment: This is happening to me on a project that uses MyFaces
> 1.2.0, Servlets API 2.5, Tiles 2.0.4, Hibernate 3.2.0, Tomcat 6. I have only
> recently upgraded to MyFaces 1.2.0 and the new Servlep API. OS is Windows.
> Reporter: Paul Dermody
>
> Recently I tried to start using immediate JSP EL expressions but I am getting
> an odd behaviour which I would like to know if anyone else has seen.
>
> In my mfaces-config.xml I have the following Managed bean defined:
>
> <managed-bean>
> <managed-bean-name>myDate</managed-bean-name>
> <managed-bean-class>java.util.Date</managed-bean-class>
> <managed-bean-scope>session</managed-bean-scope>
> </managed-bean>
>
> I have a JSP that contains the following:
>
> <f:view>
> <h:panelGrid columns="1">
> <h:outputText value="myDate=#{myDate}" />
> <h:outputText value="myDate.time=#{myDate.time} " />
> <f:verbatim>
> myDate = ${myDate}<br>
> myDate.time = ${myDate.time}
> </f:verbatim>
> </h:panelGrid>
> </f:view>
>
> The output I am getting for this code is as follows:
>
> myDate=Fri Aug 03 11:52:31 CST 2007
> myDate.time=1186163551316
> myDate = Fri Aug 03 11:52:31 CST 2007
> myDate.time =
>
> This behaviour is clearly wrong. For some reason the immediate EL expression
> is not resolving the time property correctly.
>
> I debugged this in Eclipse and I found that the "time" segment of the EL
> expression is being resolved to 'null' via a sequence of calls that
> eventually leads to the following stack trace:
>
> date.jsp line: 10
> org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(String,
> Class, javax.servlet.jsp.PageContext,
> org.apache.jasper.runtime.ProtectedFunctionMapper, boolean) line: 923
> org.apache.el.ValueExpressionImpl.getValue(javax.el.ELContext) line: 186
>
> org.apache.el.parser.AstValue.getValue(org.apache.el.lang.EvaluationContext)
> line: 97
> javax.el.CompositeELResolver.getValue( javax.el.ELContext, Object,
> Object) line: 53
>
> org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(javax.el.ELContext,
> Object, Object) line: 104
> org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.invoke
> (org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.ResolverInvoker<T>)
> line: 148
>
> org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver$4.invoke()
> line: 108
>
> org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.access$301
> (org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver,
> javax.el.ELContext, Object, Object) line: 46
>
> org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver(javax.el.CompositeELResolver).getValue(
> javax.el.ELContext, Object, Object) line: 53
>
> org.apache.myfaces.el.convert.PropertyResolverToELResolver.getValue(javax.el.ELContext,
> Object, Object) line: 106
> org.apache.myfaces.el.convert.PropertyResolverToELResolver.invoke
> (javax.el.ELContext, Object, Object,
> org.apache.myfaces.el.convert.PropertyResolverToELResolver.ResolverInvoker<T>)
> line: 193
>
> org.apache.myfaces.el.convert.PropertyResolverToELResolver$3.invoke(Object,
> Object) line: 115
> org.apache.myfaces.el.DefaultPropertyResolver.getValue(Object, Object)
> line: 64
> The source of the deepest function is as follows:
>
> public Object getValue(Object base, Object property) throws
> EvaluationException, PropertyNotFoundException
> {
> updatePropertyResolved();
> return null;
> }
>
> The updatePropertyResolved() function looks like this:
>
> private void updatePropertyResolved()
> {
>
> FacesContext.getCurrentInstance().getELContext().setPropertyResolved(false);
> }
> This function is setting the propertyResolved flag to false in the "current"
> ELContext. This is necessary since the propertyResolved flag is set to true
> before every call to each resolver. The current ELContext is of type
> org.apache.myfaces.el.unified.FacesELContext and eclipse says it's id is 313.
>
> However, when I look further up the stack it turns out that the
> FacesCompositeELResolver checks to see if the "time" segment was resolved by
> checking the value of the propertyResolved flag in a context object of type
> org.apache.el.lang.EvaluationContext with id 266. Confusingly, this context
> object delegates it's work to a different context object of type
> org.apache.jasper.el.ELContextImpl with id 259. The point here is that it
> seems to me that the wrong context object is being used somewhere - the
> propertyResolved flag is being set in one object but check in a different
> object!!
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.