Java JSTL和hashmap不工作

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

在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 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>