如何使用Spring MVC从javascript访问Java Map

问题描述 投票:0回答:1

使用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知识来处理此正确性。谢谢。

javascript java spring spring-mvc jsp
1个回答
0
投票

您可以拥有一个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调用的响应并解析数据。

© www.soinside.com 2019 - 2024. All rights reserved.