通过变量索引访问散列元素
Access hash element by variable index
我正在将 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
注入组合的语法是什么?
<c:forEach>
的 begin
和 end
被解释为 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<Integer, String>
,或者改用 List<String>
。
无论哪种方式,您都可以使用:
${it.amounts[month]}
我正在将 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
注入组合的语法是什么?
<c:forEach>
的 begin
和 end
被解释为 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<Integer, String>
,或者改用 List<String>
。
无论哪种方式,您都可以使用:
${it.amounts[month]}