Java JSTL和hashmap不工作
在servlet中,我有:Java JSTL和hashmap不工作,java,jsp,jstl,Java,Jsp,Jstl,在servlet中,我有: HashMap eventsByDayNo = new HashMap(); eventsByDayNo.put (new Integer(12), "day 12 info"); eventsByDayNo.put (new Integer(11), "day 11 info"); eventsByDayNo.put (new Integer(15), "day 15 info"); eventsByDayNo.put (new Integer(16), "day
HashMap eventsByDayNo = new HashMap();
eventsByDayNo.put (new Integer(12), "day 12 info");
eventsByDayNo.put (new Integer(11), "day 11 info");
eventsByDayNo.put (new Integer(15), "day 15 info");
eventsByDayNo.put (new Integer(16), "day 16 info");
request.setAttribute("eventsByDayNo", eventsByDayNo);
request.setAttribute("daysInMonth", new Integer(31));
在jsp中,我有:
<c:forEach var="dn" begin="1" end="${daysInMonth}" step="1" varStatus="status">
Day Number=<c:out value="${dn}" /> Value=<c:out value="${eventsByDayNo[dn]}" /><br>
</c:forEach>
天数=值=
上面的JSTL工作正常,但是如果我尝试抵消天数
所有hashmap条目都不会打印。为什么不呢
以上只是我实际应用程序的概念证明。我猜
dn+3
的类型是java.lang.Double
,而不是java.lang.Integer
(您可能会想到)
-
dn=
dnplus3=
阶级=
EL中的数字(至少是整数)被隐式视为Long
。因此,用一个Map
替换你的Map
,它就会工作。你是对的,我希望是一个整数,但它是一个长dn=1 dnplus3=4 class=java.lang.long。作为参考,表达式语言规范版本2.2在第1.7.1节中定义了操作符+
,在本例中,这将导致一个Long
值。仅仅认为这是一个强类型反击的示例,而不是像它应该做的那样防止错误,并没有达到用户期望的效果。
<ul>
<c:forEach var="dn" begin="1" end="${daysInMonth}" step="1">
<li>
<c:set var="dnplus3" value="${dn+3}" />
dn=<c:out value="${dn}" />
dnplus3=<c:out value="${dnplus3}" />
class=<c:out value="${dnplus3.class.name}" />
</li>
</c:forEach>
</ul>