尝试将HashMap从MVC模型绑定到JavaScript变量

在我最近的帖子之后:-

Cascading dropdown from HashMap in Thymeleaf Template

我在尝试使级联下拉框在我的SpringBoot Thymeleaf应用程序中工作方面取得了稳步的进展。

但是我目前正在努力将HashMap从我的MVC模型绑定到JavaScript变量,以便可以为生成下拉框选项的JavaScript代码使用。到目前为止,这是我尝试过的:-

  1. 在我的控制器类中,我创建一个HashMap,其中的键是类别(字符串),值是相关技能的列表,其中Skill类是包含技能名称和ID的Java数据对象: -

    Map<String,List<Skill>> skillsMap = new HashMap();

  2. 在脚本部分的Thymeleaf模板上,我尝试将此HashMap绑定到变量。然后,第二步,我尝试从地图中检索列表之一,并将其​​分配给第二个变量:-

    var skillsMapMap = [[${skillsMap}]];

    var adminList = skillsMapMap.get('Admin');

  3. 当我在开发人员模式下运行代码时,我可以看到正在读取HashMap,并且正在尝试将其绑定到我的变量。这是我看到的调试行:-

    var skillsMapMap = {Languages=[Python,SQL,PL/SQL,Java],Databases=[MySQL,Oracle,Mongo],Editors=[Word,TextPad,Notepad]};

乍一看看起来不错,它包含了我所有的数据,但是会引发以下错误:-

Uncaught Syntax Error: invalid shorthand property initializer

我搜索了此错误,发现它通常是由使用'='分配值而不是':'引起的,确实,我可以看到映射中的每个条目都是使用'='分配的

我非常感谢您对此问题的任何建议。也许我的整个方法是错误的,并且我不应该尝试以这种方式将复杂的模型对象绑定到JavaScript变量吗?还是我只需要稍微调整一下语法即可使其正常工作?非常感谢您阅读。

编辑:-

根据user1538301的建议,我现在尝试在添加到模型之前,使用Jackson ObjectMapper将HashMap转换为JSON字符串:-

    String objectMapper = null;
    try {
        // Default constructor,which will construct the default JsonFactory as necessary,use SerializerProvider as its
        // SerializerProvider,and BeanSerializerFactory as its SerializerFactory.
        objectMapper = new ObjectMapper().writeValueAsString(skillsMap);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
    model.addAttribute("skillsMapJson",objectMapper);

当我尝试将其绑定到我的JavaScript变量时,它失败了,因为所有引号均被转义:-

var skillsMapJson = {&quot;Languages_OD&quot;:[{&quot;id&quot;:66,&quot;name&quot;:&quot;SQL&quot;},{&quot;id&quot;:67,&quot;name&quot;:&quot;PL/SQL&quot;}],etc,etc};

这引发了异常:Uncaught SyntaxError: Unexpected token &

我觉得这还差一点,如果JSON字符串包含引号而不是“,则Map将绑定到我的变量。任何其他建议,不胜感激!

pcluckbird 回答:尝试将HashMap从MVC模型绑定到JavaScript变量

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3165077.html

大家都在问