使用JavaScript从JSP页面访问java HashMap

使用JavaScript从JSP页面访问java HashMap,javascript,java,jquery,spring,Javascript,Java,Jquery,Spring,我在Spring MVC中有一个控制器类,其中我返回一个HaspMap作为模型属性- @ModelAttribute("regPrefix") public Map<String, String> getRegPrefixesOfDepartmentforGroup(final Model model, final HttpServletRequest request) { final Map<String, String> regPrefixOfDept = n

我在Spring MVC中有一个控制器类,其中我返回一个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;
}
@modeldattribute(“regPrefix”)
公共映射getRegPrefixesOfDepartmentforGroup(最终模型,最终HttpServletRequest){
final Map regPrefixOfDept=new HashMap();
regPrefixOfDept.put(regKey,regPrefix);
返回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>

$(“#deptIdSelection”).change(函数()
{
var obj=document.getElementById(“deptIdSelection”);
var textItem=obj.options[obj.selectedIndex].text;
警报(文本项);
var mapObj=“${regPrefix}”;
for(mapObj中的var键)
警报(键+“->”+mapObj[键];
}
);

尝试访问以下映射值:

${regPrefix.key} 
如果您想遍历映射键,那么就不那么容易了:JSTL在服务器端执行,并呈现为纯文本-不创建JavaScript对象。下一行
var mapObj=“${regPrefix}”
将被呈现为
HashMap
的字符串表示形式,而不是JavaScript对象

要将地图转换为JavaScript对象,我建议您使用以下方法之一:

1) 将地图转换为
JSON
,并将其作为
字符串传递。因此,当它被呈现为JavaScript代码时,它看起来就像一个普通的JS对象:
var mapObj={“key”:“value”,…}。您可以使用或任何其他
JSON
库来实现这一点:

final Map<String, String> regPrefixOfDept = new HashMap<String, String>();
regPrefixOfDept.put(regKey, new Gson().toJson(regPrefixOfDept));
在这两种情况下,你都应该能够打电话

for(var key in mapObj)
   alert(key +" ->"+ mapObj[key]);
for(var key in mapObj)
   alert(key +" ->"+ mapObj[key]);