为了账号安全,请及时绑定邮箱和手机立即绑定

EL通过Integer键访问映射值

EL通过Integer键访问映射值

largeQ 2019-08-31 15:10:42
我有一个由Integer键入的Map。使用EL,我如何通过其键访问值?Map<Integer, String> map = new HashMap<Integer, String>();map.put(1, "One");map.put(2, "Two");map.put(3, "Three");我认为这会有效,但它没有(地图已经在请求的属性中):<c:out value="${map[1]}"/>跟进:我追查了问题。显然${name[1]},使用数字进行地图查找Long。我想通了这一点,当我换HashMap到TreeMap和收到的错误:java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long如果我将地图更改为:Map<Long, String> map = new HashMap<Long, String>();map.put(1L, "One");然后${name[1]}返回“一”。那是什么?为什么<c:out>将数字视为一个长数。对我来说似乎违反直觉(因为int比长期更常用)。所以我的新问题是,是否有EL符号通过Integer值访问地图?
查看完整描述

3 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

除了上面的注释之外,另一个有用的提示是当某个变量(例如请求参数)中包含字符串值时。在这种情况下,传入此命令也会导致JSTL将say“1”的值键入为sting,因此在Map hashmap中找不到匹配项。


解决这个问题的一种方法是做这样的事情。


<c:set var="longKey" value="${param.selectedIndex + 0}"/>

这将被视为一个Long对象,然后有机会匹配一个对象,当它包含地图Map或其他任何东西时。


然后像往常一样继续像往常一样


${map[longKey]}


查看完整回答
反对 回复 2019-08-31
?
杨__羊羊

TA贡献1943条经验 获得超7个赞


如果将数字放入“(”“)”,则可以使用Long中的所有函数。这样你可以将long转换为int:


<c:out value="${map[(1).intValue()]}"/>


查看完整回答
反对 回复 2019-08-31
  • 3 回答
  • 0 关注
  • 336 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号