java - 将 java 映射从 JSTL/JSP 传递到 JavaScript 方法

标签 java javascript json jsp

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

我们定义了一个映射,以 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”。其他映射的情况类似。

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

我想将所选选项的特定映射传递给 JS 方法并填充后续下拉列表。

转换为 JSON 是唯一的方法吗?如果是,如何从 Controller 传递它?如果我们不从 Controller 传递它,那么在 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');

}

}

最佳答案

首先,我认为您最好将其更改为一个 Map < String, List < String >>,这样更有意义,因为它是一个单一的深度层次结构。

接下来,您可以选择将 map 转换为 JSON 并使用 eval 在 javascript 中填充对象,或者手动遍历 map 键并将它们添加到对象中,这完全取决于您手头的工具将 map 序列化到 JSON 服务器端(您可以使用 new JSONObject(topics); 来自 json.org),然后将 json 评估为 Javascript 上的变量。

关于java - 将 java 映射从 JSTL/JSP 传递到 JavaScript 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23611935/

相关文章:

java - 离开应用程序时,必须删除 SharedPreferences

java - SWT 浏览器关注下一个和上一个高亮文本

javascript - jQuery 将页脚贴在页面底部

javascript - AJAX不会第二次获取JSON数据

javascript - 将 json 回调数据转换为日期

c# - 无法使用 Jive REST API 发布共享 - 出现 400 Bad Request 错误

java - 当组件被限定为 session 时,无法将 Spring Controller 限定为请求

java - 在 FireFox 16、17、18 + 中使用 java

java.lang.NoSuchFieldError : INSTANCE with Spring Social on Azure 错误

javascript - 如何在azure计时器功能中设置多个时间表?