Hi I think it is a bug in JSF 2.2 spec. The behavior for ScopedAttributeELResolver (for facelets) is defined in section 5.6.2.9. To solve it (for 2.3) you should raise an issue on:
https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC But I found this one already created on Mojarra issue tracker: https://java.net/jira/browse/JAVASERVERFACES-3362 Please create an issue on the spec issue tracker. MyFaces already has some params to control the EL Resolver ordering, so I suppose this feature will help to fix the problem for 2.2.x. Besides that, we can't do anything else from this side. regards, Leonardo Uribe 2015-03-27 9:19 GMT-05:00 William Lucy <wtl...@us.ibm.com>: > > Thanks for the response, Leonardo. > > From what I can tell, the issue isn't that MyFaces can't find the > StaticFieldELResolver - that is loaded correctly. JSP static field EL > references do work properly through MyFaces, so there does seem to be some > JSF issue. > > I think there may be a spec issue here? (What I believe to be) a similar > issue had to be addressed for JSP 2.3: > https://bz.apache.org/bugzilla/show_bug.cgi?id=57141 > > MyFaces has a resolver, ScopedAttributeResolver, which always sets the > "resolved" field on the EvaluationContext to true if the EL expression's > "property" isn't null. The issue with that is when we're trying to resolve > the EL expression "base" (eg. "Boolean" in the expression Boolean.TRUE) EL > 3.0 never has a chance to resolve the import the base ELClass, since it > first runs through the EL Resolvers. > > My testing has shown that if we don't set context.setPropertyResolved(true) > in the ScopedAttributeResolver, this particular case (#{Boolean.TRUE}) > works as expected. > > Any thoughts on this? Let me know if I need to clarify anything. > > Regards, > > Bill Lucy > > > Leonardo Uribe <lu4...@gmail.com> wrote on 03/25/2015 06:10:00 PM: > >> From: Leonardo Uribe <lu4...@gmail.com> >> To: MyFaces Discussion <users@myfaces.apache.org> >> Date: 03/25/2015 06:11 PM >> Subject: Re: EL 3.0 Static Field References >> >> Hi >> >> It is in the spec, it should work. >> >> There is some code in >> org.apache.myfaces.el.unified.ResolverBuilderForFaces that deals with >> this: >> >> if (STATIC_FIELD_EL_RESOLVER_CLASS != null && >> GET_STREAM_EL_RESOLVER_METHOD != null) >> { >> try >> { >> ELResolver streamElResolver = (ELResolver) >> GET_STREAM_EL_RESOLVER_METHOD.invoke( >> getRuntimeConfig().getExpressionFactory()); >> if (streamElResolver != null) >> { >> // By default return null, but in a EL 3 >> implementation it should be there, >> // this is just to avoid exceptions in junit testing >> list.add(streamElResolver); >> } >> list.add((ELResolver) >> STATIC_FIELD_EL_RESOLVER_CLASS.newInstance()); >> } >> >> The code checks for javax.el.StaticFieldELResolver class and >> ExpressionFactory.getStreamELResolver(...) method before >> add both EL resolvers. >> >> If MyFaces jars cannot locate these classes, the EL resolvers >> are not loaded (because it assumes EL < 3.0), and the >> described behavior will happen. >> >> regards, >> >> Leonardo Uribe >> >> 2015-03-25 15:14 GMT-05:00 William Lucy <wtl...@us.ibm.com>: >> > >> > >> > Hi All, >> > >> > I'm running into some issues trying to test the EL 3.0 functionality on >> > MyFaces 2.2.7 + Tomcat 8.0.16. My understanding is that we should be > able >> > to reference static fields/methods directly from facelets, eg. >> > >> > Boolean.TRUE test: [<h:outputText id="out2" >> > value="#{Boolean.TRUE}"/>] >> > >> > should return "Boolean.TRUE test: [true]". This isn't the case, > however; >> > no value is returned, and nothing's logged. Additionally, when I try > to >> > access a static field on a local ManagedBean, I get >> > >> > ... >> > javax.el.PropertyNotFoundException: Property 'staticReference' > not >> > found on type beans.EL30StaticFieldsAndMethodsBean >> > at javax.el.BeanELResolver$BeanProperties.get >> > (BeanELResolver.java:244) >> > at javax.el.BeanELResolver$BeanProperties.access$300 >> > (BeanELResolver.java:221) >> > at javax.el.BeanELResolver.property(BeanELResolver.java:331) >> > at javax.el.BeanELResolver.getValue(BeanELResolver.java:95) >> > at javax.el.CompositeELResolver.getValue >> > (CompositeELResolver.java:66) >> > at >> > >> org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue >> > (FacesCompositeELResolver.java:179) >> > ... 1 more >> > >> > Where the ManagedBean is defined simply as >> > >> > package beans; >> > import javax.faces.bean.ApplicationScoped; >> > import javax.faces.bean.ManagedBean; >> > >> > @ManagedBean(name = "staticbean") >> > @ApplicationScoped >> > public class EL30StaticFieldsAndMethodsBean { >> > ... >> > public static final String staticReference = "static > reference"; >> > ... >> > } >> > >> > Has anyone else tried working with these kinds of EL 3.0 features? Or > am I >> > possibly just missing something here? >> > >> > Thanks, >> > Bill Lucy >>