javascript - 使用 JavaScript 从 JSP 页面访问 java HashMap

标签 javascript java jquery spring

我在 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/

相关文章:

java - Android Studio 的 .alias 文件类型?

javascript - 点击显示表单,平滑过渡

javascript - jQuery 输入数字微调器

java - 如何从 "timestamp without time zone"字段收集到没有时区的 Java 时间戳

javascript - slider 拇指无法在 Microsoft Edge 中正确显示

javascript - 如何在 JavaScript 中迭代包含数组的对象?

php - 使用 jquery 导出 PDF、CSV、Excel 表单数据表?

javascript - angularjs 中 ng-repeat 和 collection-repeat 的区别?

javascript - 在 MVC 框架中呈现 HTML 表格

c# - 了解在 C# 和 Java 中产生不同结果的字符串的显式转换