[英]Java hashmap value to be used as a javascript hashmap in jsp
[英]Accessing a java HashMap from JSP page using JavaScript
我在Spring MVC中有一个控制器类,在这里我将HaspMap作为Model属性返回-
@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页面中,我试图访问Hashmap并将Hasmap的键/值对使用JavaScript存储在变量中。 我正在尝试像下面,但不正确。 谁能建议该怎么做
<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>
尝试像这样访问地图值:
${regPrefix.key}
如果要遍历map键,则不是那么容易:JSTL在服务器端执行,并呈现为纯文本-不创建JavaScript对象。 以下行var mapObj = "${regPrefix}";
将呈现为HashMap
的字符串表示形式,而不是JavaScript对象。
要将地图转换为JavaScript对象,建议您使用以下方法之一:
1)将地图转换为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>
遍历地图以生成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]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.