【发布时间】:2020-08-28 22:26:57
【问题描述】:
在使用 Spring MVC 时从 javascript 访问 java Map 的最佳方法是什么?
我正在构建一个网页,根据您从复选框中选择的值,动态文本将出现在另一个 div 中,并使用 getElementById("element").innerHTML=${ 提供有关该选项的更多详细信息变量}。
我正在使用 Maps 来填充复选框选项,它在 JSP 中运行良好,但在 javascript scriptlet 或外部 .js 文件中根本无法运行。它只是将其理解为一个字符串,而不是一个 Map 或 Array。
以下代码是我目前得到的:
属性文件:
checkBoxItems={'0':'The Value'}
myMapObject={'0','Map Stuff'}
在控制器 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 知识来处理这个正确性。 谢谢。
编辑:
正如Yan Khonski 所建议的那样,通过异步请求 (ajax) 将数据作为 JSON 传递可以进行细微的更改。
- dataType: 'json' 返回一个 JSON 对象,所以不需要实现 JSON 解析方法。
最终代码:
var globalMetodologiaComplemento;
$(document).ready(function () {
$.ajax({
type: 'GET',
url: '/gla/getMet',
dataType: 'json',
success: function (data) {
globalMetodologiaComplemento = data;
console.log(globalMetodologiaComplemento[0]);
}
});
});
(...)
【问题讨论】:
-
Alternative oracle.com/technical-resources/articles/javase/… 您可以将地图值作为属性(对象字段)访问
标签: javascript java spring spring-mvc jsp