确定Map中的列表大小<integer,list <string =“”>&gt;在JSTL中<c:if>

时间:2017-10-12 17:43:38

标签: jsp jstl el

我有以下地图:

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>

所以我想做的是:

  1. 首先通过提供特定密钥
  2. 从地图中获取列表
  3. 然后检查列表的大小是否大于某个数字
  4. 然后遍历列表

2 个答案:

答案 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>