JSP 如何在名称属性中连接值?

JSP how to concat value in name attribute?

这是我在 Thymeleaf 中使用的。我只是用 dish.id.

连接 dishIdQuantityMap
        <div class="single-menu" th:each="dish : ${dishList}">
                              <input
                            th:value="0"
                            th:name="${'dishIdQuantityMap[' + dish.id + ']'}"
                            type="number"
                            min="0"
                            max="100"
                            step="1"
                            readonly
                    />

它工作正常,但如果我在 JSP

中做同样的事情
   <input
                                value="0"
                                name="${'dishIdQuantityMap[' + dish.id + ']' }"
                                type="number"
                                min="0"
                                max="100"
                                step="1"
                                readonly
                        />

失败了。第 142 行发生异常 我做错了什么?

Caused by: java.lang.NumberFormatException: For input string: "dishIdQuantityMap"

更新。 如果我这样做,它有点管用

name="${'dishIdQuantityMap['}${dish.id}${']'}"

我觉得你引用的太多了。这是一个演示 JSP.

<%@ page import="java.util.HashMap, java.util.ArrayList"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
    ArrayList<String> list = new ArrayList<String>();
    list.add("a");
    list.add("b");
    list.add("c");
    pageContext.setAttribute("list", list);
    HashMap<String, Integer> map = new HashMap<String, Integer>();
    map.put("a", 11);
    map.put("b", 22);
    map.put("c", 33);
    pageContext.setAttribute("map", map);
%>
<c:forEach items="${map}" varStatus="loopCount">
    ${map[list[loopCount.index]]}
</c:forEach>

输出是 11 22 33 。 您可以尝试使用 name="${dishIdQuantityMap[dish.id]}" 正如 Jeka_FRIZZ 指出的那样,菜肴必须在范围内。