我们有几个相关的下降,其中一个下拉的结果与其他下拉有关。
我们有一个映射定义为什么时候以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');
}
}
答案 0 :(得分:0)
首先,我认为您最好更改它,以便主题是Map&lt;字符串,列表&lt;字符串&gt; &gt;,因为它是一个单一的深度层次结构,所以更有意义。
接下来你可以选择将地图转换为JSON并使用eval在javascript中填充对象,或者手动横切地图键并将它们添加到对象中,这一切都取决于你手头的工具将地图序列化为JSON服务器端(您可以使用新的JSONObject(主题);来自json.org)然后只需将json评估为Javascript上的变量。