5

我有一个 Java 地图。我想将其转换为 JavaScript 地图。

转换为 JS map 的 java 函数如下:

private Object getJSLocalizedValueMap() {

    Map<String, String> langSel = new HashMap<String, String>();
    langSel.add("en", true);
    langSel.add("de", false);
    langSel.add("fr", false);

    //Now convert this map into Javascript Map
    NativeObject nobj = new NativeObject();
    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("javascript");
    for (Map.Entry<String, String> entry : langSel.entrySet()) {
        nobj.defineProperty(entry.getKey(), entry.getValue(), NativeObject.READONLY);
    }
    engine.put("langSel", nobj);
    return langSel;
}

在 JSP 页面的 javascript 中,代码是:

var langs = ${messagesJS};

在 Javascript 中,我得到:

langs = {en=true, de=false, fr=false};

代替

langs = {"en":true, "de":false, "fr":false}

请建议我如何实现这一目标?

4

2 回答 2

5

您可能可以为此使用JSONObject该类。它有一个你传入的构造函数Map。调用它然后调用该toString()方法,它应该给你一个 JS 数组。

http://www.json.org/javadoc/org/json/JSONObject.html#JSONObject%28java.util.Map%29

所以像:

Map<String, String> langSel = new HashMap<String, String>();
langSel.add("en", true);
langSel.add("de", false);
langSel.add("fr", false);

JSONObject jsonObj = new JSONObject(langSel);
engine.put("langSel", jsonObj.toString());

您需要确保 org.json.JSONObject 类位于您的类路径中。下载 JAR 并手动添加到类路径(通过 Eclipse 或其他方式),或者如果您使用 Maven,请使用如下依赖项:

  <dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20070829</version>
  </dependency>

如果你没有使用 Maven,你仍然可以从这里下载 JAR:http: //mvnrepository.com/artifact/org.json/json/20090211

于 2012-12-12T13:21:12.887 回答
2

而不是下线

langSel.add("en", true);

使用这条线

langSel.add("\"en\"", true);

试试这个可能会有所帮助。

于 2012-12-12T13:28:22.023 回答