我有以下地图:
Map<Integer, List<String>> namesById= new HashMap<>() ;
我想在jsp中遍历地图。但是,首先我想先检查列表大小是否大于某个数字。
所以我想要的是(为测试目的而放置测试编号):
if (namesById.get(1).size() > 3)
for (String s: namesById.get(1)){
do something
}
我需要在JSP中完成它。由于我是JSTL的初学者,我不知道如何编写它并且很难调试。我尝试了这个表达式:
<c:if test="${fn:length(namesById[1]) gt 3}"
</c:if>
所以我想做的是:
答案 0 :(得分:2)
那是因为
Integer.valueOf(1).equals(Long.valueOf(1))
总是false
。
在表达式语言中,${1}
被解释为Long
,但这与Integer
键不匹配。基本上,你在这里有效地做了namesById.get(1L)
。
将您的地图更改为Map<Long, List<String>>
,然后就可以了。
答案 1 :(得分:-1)
使用Jstl,您可以从map获取键和值。使用该值可以检查大小。请查看以下示例。
<%
Map<Integer, List<String>> namesById = new HashMap<Integer, List<String>>();
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
namesById.put(1, list);
list=new ArrayList<String>();
list.add("3");
list.add("4");
namesById.put(2, list);
pageContext.setAttribute("itemList", namesById);
%>
<c:forEach items="${itemList}" var="entry">
<c:if test="${fn:length(entry.value) gt 3}">
Value > 3
</c:if>
</c:forEach>