将Java映射从JSTL / JSP传递给JavaScript方法

时间:2014-05-12 14:37:21

标签: java javascript json jsp

我们有几个相关的下降,其中一个下拉的结果与其他下拉有关。

我们有一个映射定义为什么时候以map-of-map的形式选择,像这样;

Map<String,Map<String,String>> topics = new HashMap<String, Map<String,String>>();
        Map<String,String> ds = new HashMap<String, String>();
        ds.put("Array", "Array");
        ds.put("LL", "LL");
        topics.put("DS",  ds);
        Map<String,String> algo = new HashMap<String, String>();
        algo.put("BS", "BS");
        algo.put("Sorting", "Sorting");
        topics.put("Algorithm", algo);

        Map<String,String> phil = new HashMap<String, String>();
        phil.put("phil1", "phil1");
        phil.put("phil2", "phil2");
        topics.put("Philosophy",  phil);

        Map<String,String> others = new HashMap<String, String>();
        others.put("others", "others");
        topics.put("Others", others);

根据上面的地图,当选择“DS”时,我们要显示“Ärray”和“LL”。与其他映射类似。

我将此映射传递给JSP并使用JSTL呈现选项。在决定调用JS来填充后续下拉列表时,我想将其更改为JSON。

我想将所选选项的特定地图传递给JS方法,然后填充后续下拉列表。

转换为JSON是唯一的方法吗?如果是的话,如何从控制器传递它?如果我们不从控制器传递它,那么在JSP本身中更简洁的方法是什么?

JSP Block如下:

<div>Subject</div>
        <select name="topic"  onchange="callJavaScriptMethodWithMapOfSelectedComponent(mapOfSelectedValue)");">
            <c:forEach var="entry" items="${topics}">
                    <option value="${entry.key}">${entry.key}</option>
            </c:forEach>
        </select>
<select name="college">
                    <option value="default">Select Subject</option>
           </select>

根据第一个下拉列表中选择的值,我们需要在第二个下拉列表中填充值。

JS方法将在第一个下拉列表中选择所选值的映射并填充第二个值。

  function setOptions(chosen) {
var selbox = document.myform.college;

selbox.options.length = 0;
if (chosen == " ") {
  selbox.options[selbox.options.length] = new Option('Please select one of the options above first',' ');

}
  selbox.options[selbox.options.length] = new Option('//Choosen from the map passed','oneone');

}

}

1 个答案:

答案 0 :(得分:0)

首先,我认为您最好更改它,以便主题是Map&lt;字符串,列表&lt;字符串&gt; &gt;,因为它是一个单一的深度层次结构,所以更有意义。

接下来你可以选择将地图转换为JSON并使用eval在javascript中填充对象,或者手动横切地图键并将它们添加到对象中,这一切都取决于你手头的工具将地图序列化为JSON服务器端(您可以使用新的JSONObject(主题);来自json.org)然后只需将json评估为Javascript上的变量。