Spring MVC,HashMap作为模型 - 如何在jsp

时间:2016-07-06 14:03:52

标签: javascript java jsp spring-mvc

我有一个这样的模型:

 @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中的模型。

但我需要这个map键作为javaScript变量,如:

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

它没有用。是否可以在javaScript中完成?

2 个答案:

答案 0 :(得分:1)

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

这样的东西
valueUnbound

答案 1 :(得分:0)

谢谢你的帮助。我做了另一个解决方法 - 我使用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" />