使用JavaScript从JSP页面访问Java HashMap

4

我有一个Spring MVC控制器类,在这个类中,我返回一个HashMap作为模型属性 -

@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并使用JavaScript将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>
1个回答

3

尝试像这样访问地图值:

${regPrefix.key} 

如果您想遍历地图键,这并不容易: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]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接