The BeanELResolver
that translates your EL-Expressions to property access adheres to the JavaBean specification. It states (in Section 8.8):
Thus when we extract a property or event name from the middle of an existing Java name, we normally convert the first character to lower case. However to support the occasional use of all upper-case names, we check if the first two characters of the name are both upper case and if so leave it alone.
The resolver works by reflection on your actual class. It produces a list of FeatureDesriptor instances and matches those to your expression. So what the resolver sees from your bean is:
- Property
FIELD
, both read- and writable - Transient property
f1
, read- and writable - Unexposed property
F1
Since you're trying to access F1
, which has no getters and setters according to the JavaBeans specification, the resolver throws a PropertyNotFoundException
.
To fix this, adhere to the normal camelCase convention and/or use longer names.
See also: Where is the JavaBean property naming convention defined?