【问题标题】:Spring MVC, HashMap as model - how to get value using javascript variable as key in jspSpring MVC,HashMap作为模型-如何使用javascript变量作为jsp中的键来获取值
【发布时间】:2016-07-06 14:03:51
【问题描述】:

我有一个这样的模型:

 @ModelAttribute("availableFonts")
    public Map<String, String> getAllAvaliableFonts() {
     ...  
    }

模型包含字体名称作为键和 css 代码作为值。现在在 jsp 中,我有一个 javaScript 代码,它应该动态应用 css 来预览字体,看起来或多或少像这样:

var css = '${availableFonts.get("Arial Black")}';
jQuery('#preview').removeClass().addClass(css);

它与硬编码的 map.get() 配合得很好。 Css 值取自 HashMap,它是我的 jsp 中的模型。

但我需要将此映射键作为 javaScript 变量,例如:

 var key = 'Arial Black';
 var css = '${availableFonts.get("' + key + '")}';
 jQuery('#preview' + i).removeClass().addClass(css);

而且它不起作用。是否可以在 javaScript 中做到这一点?

【问题讨论】:

    标签: javascript java jsp spring-mvc


    【解决方案1】:

    由于 JSP 在服务器上生成而 JavaScript 在客户端上执行,因此无法以您想要的方式执行此操作。您可以做的是将您的模型属性作为 JSON,在生成页面时将其分配给 JavaScript 变量,然后使用此 JavaScript 变量进行操作。类似的东西

    var myFonts = ${availableFonts};
    var myFont = myFonts['some font'];
    

    【讨论】:

    • 除了直接传递地图对 JS 没有任何意义。它需要进行 JSON 编码,以便在 JS 中作为对象读取。
    【解决方案2】:

    感谢您的帮助。我做了另一种解决方法 - 我使用 map 生成带有值的选项列表:

     <form:select path="selectedFont" id ="fonts">
           <c:forEach var="font" items="${availableFonts}">
                  <form:option value="${font.value}" label="${font.key}"/>
           </c:forEach>
     </form:select>
    

    我使用 jQuery 来使用值进行预览:

     var fontName = jQuery('#fonts>option:selected').text();
     var fontClass = jQuery('#fonts').val();
     jQuery('#preview' + i).removeClass().addClass(fontClass);
     jQuery('#preview' + i).text(fontName);
    

    预览只是一个 div:

    <div id="preview" />
    

    【讨论】:

      猜你喜欢
      • 2017-01-08
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 2013-04-18
      • 2015-04-10
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多