【问题标题】:Determine size of list in Map<Integer, List<String>> in JSTL <c:if>确定 JSTL <c:if> 中 Map<Integer, List<String>> 中列表的大小
【发布时间】:2017-10-12 17:43:38
【问题描述】:

我有以下地图:

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. 然后遍历列表

【问题讨论】:

    标签: jsp jstl el


    【解决方案1】:

    那是因为

    Integer.valueOf(1).equals(Long.valueOf(1))
    

    总是false

    在表达式语言中,${1} 被解释为 Long,这与 Integer 键不匹配。基本上,你在这里有效地做一个namesById.get(1L)

    将您的地图更改为 Map&lt;Long, List&lt;String&gt;&gt; 即可。

    【讨论】:

      【解决方案2】:

      使用 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-09-30
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-18
        • 2017-03-21
        相关资源
        最近更新 更多