5

私はJavaマップを持っています。JavaScriptマップに変換したいです。

JSマップとして変換する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 に答える