JSTL и hashmap не работают - PullRequest
       11

JSTL и hashmap не работают

2 голосов
/ 13 октября 2010

В сервлете у меня есть:

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 работает нормально, но если я попытаюсь сместить номер дня <c:out value="${eventsByDayNo[dn+3]}" /> ни одна из записей хеш-карты не распечатывается. Любые ответы на вопрос, почему нет?

Вышесказанное является лишь подтверждением концепции моего реального приложения.

Ответы [ 2 ]

3 голосов
/ 13 октября 2010

Числа (по крайней мере, целые числа) в EL неявно рассматриваются как Long. Поэтому замените ваш Map<Integer, String> на Map<Long, String>, и он будет работать.

1 голос
/ 13 октября 2010

Я предполагаю, что dn+3 имеет тип java.lang.Double, а не java.lang.Integer (что вы можете ожидать).

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...