【问题标题】:Access hash element by variable index通过变量索引访问哈希元素
【发布时间】:2020-11-10 19:57:00
【问题描述】:

我正在将 12 个相同的 HTML 表单控件重构为循环内的一段代码。我不能只循环表单,因为每月值可能存在也可能不存在,所以我在 1-12 范围内构建了一个 month 变量(到目前为止一切都很好):

<c:forEach var="month" begin="1" end="12">
    Month #<c:out value="${month}"/>
</c:forEach>

现在我需要从两个哈希图中访问项目:

HashMap<Long, String> amounts
HashMap<String, String> invalidFields

旧的“静态”语法是:

<c:out value="${it.amounts[1]}"/>
<c:out value="${it.invalidFields.amount_1}"/>

month 注入混合的语法是什么?

【问题讨论】:

  • 你试过这样${it.amounts[month]}吗?
  • @Swati 是的,我做到了。我没有收到语法错误,但输出仍然为空。
  • 你是在内部还是外部访问这个循环?
  • 在里面。就在&lt;c:out value="${month}"/&gt;旁边。
  • 查看this 帖子可能对您有所帮助。

标签: jsp jstl el


【解决方案1】:

&lt;c:forEach&gt;beginend 被解释为 java.lang.Integer,但您的映射键被创建为 java.lang.Long

Integer int1 = new Integer(1);
Long long1 = new Long(1L);
System.out.println(int1.equals(long1)); // false

所以Map#get() 永远不会对这些键起作用。

将您的amounts 改为Map&lt;Integer, String&gt;,或改用List&lt;String&gt;

无论哪种方式,您都可以使用:

${it.amounts[month]}

【讨论】:

  • 完全正确,我实际上使用了正确的语法,但类型不匹配。至于另一个哈希映射,我也可以使用方括号,因此只需将${'amount_'}${month} 连接到一个新变量中并在方括号内使用该变量。
猜你喜欢
  • 2013-01-03
  • 2013-04-18
  • 1970-01-01
  • 2013-08-09
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多