我在 Spring MVC 中有一个 Controller 类,我在其中返回一个 HaspMap 作为模型属性 -
@ModelAttribute("regPrefix")
public Map<String, String> getRegPrefixesOfDepartmentforGroup(final Model model, final HttpServletRequest request) {
final Map<String, String> regPrefixOfDept = new HashMap<String, String>();
regPrefixOfDept.put(regKey, regPrefix);
return regPrefixOfDept;
}
现在在相应的 JSP 页面中,我尝试使用 JavaScript 访问 Hashmap 并将 Hasmap 的键/值对存储在变量中。我正在尝试如下所示,但这是不对的。谁能建议如何做到这一点
<script>
$("#deptIdSelection").change(function()
{
var obj = document.getElementById("deptIdSelection");
var textItem = obj.options[obj.selectedIndex].text;
alert(textItem);
var mapObj = "${regPrefix}";
for(var key in mapObj)
alert(key +" ->"+ mapObj[key]);
}
);
</script>
最佳答案
尝试像这样访问 map 值:
${regPrefix.key}
如果您想迭代映射键,那就没那么容易了:JSTL 在服务器端执行并呈现为纯文本 - 不会创建 JavaScript 对象。以下行var mapObj = "${regPrefix}";
将被渲染为 HashMap
的字符串表示形式,而不是 JavaScript 对象。
要将 map 转换为 JavaScript 对象,我建议您使用以下方法之一:
1) 将您的 map 转换为 JSON
并将其作为 String
传递。因此,当它被渲染为 JavaScript 代码时,它将看起来像一个常规的 JS 对象: var mapObj = {"key": "value", ...};
。您可以使用Gson或任何其他 JSON
库来实现这一点:
final Map<String, String> regPrefixOfDept = new HashMap<String, String>();
regPrefixOfDept.put(regKey, new Gson().toJson(regPrefixOfDept));
然后var mapObj = ${regPrefix};
(请注意,您不需要引号,因为您希望 mapObj
成为 JS 对象,而不是字符串)
2) 使用 <c:forEach>
迭代您的 map 生成JS对象:
var mapObj = {
<c:forEach items="${regPrefix}" var="item" varStatus="loop">
${item.key}: '${item.value}' ${not loop.last ? ',' : ''}
</c:forEach>
};
在这两种情况下,您都应该能够调用
for(var key in mapObj)
alert(key +" ->"+ mapObj[key]);
关于javascript - 使用 JavaScript 从 JSP 页面访问 java HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48482955/