【发布时间】:2014-06-29 23:41:16
【问题描述】:
我们有几个相关的下拉菜单,其中一个下拉菜单的结果与另一个下拉菜单相关。
我们定义了一个映射,用于以 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”时,我们要显示“ÄRRRAY”和“LL”。其他映射也是如此。
我将此映射传递给 JSP 并使用 JSTL 呈现选项。在决定调用 JS 填充后续下拉列表时,我想将其更改为 JSON。
我想将所选选项的特定映射传递给 JS 方法并填充后续下拉列表。
转换为 JSON 是唯一的方法吗?如果是,如何从控制器传递它?如果我们不从控制器传递它,那么在 JSP 本身中有哪些更简洁的方法呢?
JSP 块如下:
<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');
}
}
【问题讨论】:
-
key 和 value 相同的情况下为什么要使用 hashmap?
-
这只是一个例子,我可以有一些东西(例如主题代码和名称)
-
你能解决吗,我也需要同样的实现。
标签: java javascript json jsp