【问题标题】:Pass java map from JSTL/JSP to JavaScript methods将 Java 映射从 JSTL/JSP 传递到 JavaScript 方法
【发布时间】: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


【解决方案1】:

首先,我认为您最好将其更改为主题是 Map >,因为它是单个深度层次结构,所以更有意义。

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

【讨论】:

  • 如果你已经解决了,请解释一下实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多