在 Map<Integer, List<String>> in JSTL <c:if> 中确定列表的大小
Determine size of list in Map<Integer, List<String>> in JSTL <c:if>
我有以下地图:
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>
所以我想做的是:
- 首先通过给出特定的键从地图中获取列表
- 然后检查列表的大小是否大于某个数字
- 然后遍历列表
使用 Jstl,您可以从 map.Using 获取键和值,您可以检查 size.Check 下面的示例。
<%
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>
那是因为
Integer.valueOf(1).equals(Long.valueOf(1))
总是false
。
在表达式语言中,</code> 被解释为 <code>Long
,这与 Integer
键不匹配。基本上,您实际上是在此处执行 namesById.get(1L)
。
将您的地图更改为 Map<Long, List<String>>
即可。
我有以下地图:
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>
所以我想做的是:
- 首先通过给出特定的键从地图中获取列表
- 然后检查列表的大小是否大于某个数字
- 然后遍历列表
使用 Jstl,您可以从 map.Using 获取键和值,您可以检查 size.Check 下面的示例。
<%
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>
那是因为
Integer.valueOf(1).equals(Long.valueOf(1))
总是false
。
在表达式语言中,</code> 被解释为 <code>Long
,这与 Integer
键不匹配。基本上,您实际上是在此处执行 namesById.get(1L)
。
将您的地图更改为 Map<Long, List<String>>
即可。