如何使用 EL 表达式中的键获取 EnumMap 中的值?
我有一个 EnumMap:
EnumMap<Gender, Integer> genderMap = new EnumMap(Gender.class);
其中 Gender 是 public enum Gender {Male, Female};
我有 req.setAttribute("genderMap", sexMap);
现在我想得到通过 JSP 文件中的键获取 genderMap
中的值:
${genderMap['Male']}
但这不会获取 genderMap
中的值。为什么?
I have a EnumMap:
EnumMap<Gender, Integer> genderMap = new EnumMap(Gender.class);
where Gender is public enum Gender {Male, Female};
And I have req.setAttribute("genderMap", genderMap);
Now I want to get the value from genderMap
by a key in JSP file:
${genderMap['Male']}
but this doesn't get the value in genderMap
. Why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
不要使用枚举映射。只需将枚举用作 Java 中的枚举和 JSP/EL 中的字符串即可。
我假设您因为数据库映射而需要该整数。例如,
Male
在数据库中存储为1
,Female
在数据库中存储为0
。在这种情况下,您需要按如下方式重新设计枚举:当通过 JDBC 从数据库填充
Person
时,只需执行在 JSP 中向最终用户显示预选选项时,只需执行
或
什至不执行
id
在 servlet 中收集提交的值时,只需
在 HTML 中不使用
id
时执行 或 即可Don't use enum mappings. Just use enums as enums in Java and as strings in JSP/EL.
I'll assume that you need that integer because of a database mapping. E.g.
Male
is stored as1
in database andFemale
is stored as0
in database. In that case, you need to redesign your enum as follows:When populating the
Person
from DB by JDBC, just doWhen showing preselected options to enduser in JSP, just do
and
or even without the
id
When collecting submitted values in servlet, just do
or when using without
id
in HTML因为
'Male'
计算结果为字符串“Male”,而不是Gender.Male
。您需要有权访问Gender.Male
常量才能访问其映射条目。但在 JSP EL 中访问常量是不可能的,因此您可能需要这样做:Because
'Male'
evaluates to the String "Male", not toGender.Male
. You would need to have access to theGender.Male
constant to access its map entry. But accessing constants is not possible in JSP EL, so you might want to do :和
${genderMap['Male']}
这肯定会起作用。
and
${genderMap['Male']}
this would work definitely.
我的解决方案是为枚举映射创建一个包装器(适配器)。它需要 String 键并通过调用 Enum.valueOf() 方法将它们转换为相应的 Enum 值。
示例 bean 中的相关部分:
现在我可以方便地访问 EL 中的映射元素:
这是包装类:
My solution was to create a wrapper (adapter) for enum maps. It expects String keys and converts them to corresponding Enum values by calling Enum.valueOf() method.
Relevant parts from an example bean:
Now I can conveniently access the map elements in EL:
Here's the wrapper class: