使用Spring MVC时从javascript访问Java Map的最佳方法是什么?
我正在构建一个网页,根据您从复选框中选择的值,通过使用getElementById(“ element”)。innerHTML = $ {var},动态文本将显示在另一个div中,其中包含有关该选项的更多详细信息。 。
我正在使用Google Maps填充复选框选项,它在JSP中确实可以正常工作,但在javascript scriptlet或外部.js文件中则无法使用。它只是将其理解为字符串,而不是Map或Array。
下面的代码是到目前为止我得到的:
属性文件:
checkBoxItems={'0':'The Value'}
myMapObject={'0','Map Stuff'}
在Controller java文件中:
@Controller
@RequestMapping(value = "/example")
public Class ExampleController
{
@Value("#{${checkBoxItems}}")
Map<String, String> checkBoxOptions;
@Value("#{${myMapObject}}")
Map<String, String> myMapObject;
@RequestMapping(value = "/newExample", method = RequestMethod.GET)
public String Hello(Model model)
{
model.addAttribute("checkBoxOptions", checkBoxOptions);
model.addAttribute("myMapObject", myMapObject);
return "view";
}
}
在JSP中:(我已简化以显示我打算实现的目标)
<form:select class="custom-select" id="metodologia" path="metodologia"
onchange="FillWithComplement('${myMapObject}')">
<form:option value="-">Select an Option</form:option>
<form:options items="${checkboxOptions}"/>
</form:select>
在第一个JavaScript试用版中:
<script>
function FillWithComplement(MapObject)
{
document.getElementById("div").innerHTML = MapObject;
}
</script>
输出为:
{0=Map Stuff}
如果我这样做,也将不起作用:
<script>
function FillWithComplement(MapObject)
{
var newMap = new Map(MapObject);
document.getElementById("div").innerHTML = newMap;
}
</script>
而且我知道我可能没有足够的JavaScript知识来处理此正确性。谢谢。
您可以拥有一个REST端点,该端点以JSON格式返回数据。然后,您的客户端(JavaScript代码)将向页面的其余端点发出异步请求(在页面加载后),并获取数据。然后,js代码将JSON解析为对象并可以使用它。
1)控制器返回模型和视图。该视图是一个JSP页面。
@Controller
@RequestMapping(value = "/example")
public Class ExampleController
{
@Value("#{${checkBoxItems}}")
Map<String, String> checkBoxOptions;
@Value("#{${myMapObject}}")
Map<String, String> myMapObject;
@RequestMapping(value = "/newExample", method = RequestMethod.GET)
public String Hello(Model model) {
model.addAttribute("checkBoxOptions", checkBoxOptions);
model.addAttribute("myMapObject", myMapObject);
return "view";
}
@ResponseBody
@GetMapping(/additional-data)
public String getData() {
return objectMapper.writeValueAsString(yourObject);
}
}
检查Jackson库以将对象序列化为JSON。
2)加载jsp页面后,您可以向控制器中的另一个端点发出异步(AJAX)请求。该端点将返回JSON数据(您必须将对象序列化为JSON)。
$.onload(function() {
// Google AJAX to make a call to /example/additional-data
})
3)您的客户端JS代码将收到AJAX调用的响应并解析数据。