我有一张Java Map。我想将其转换为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}
请建议我如何实现这个目标?
答案 0 :(得分: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并手动添加到classpath(通过Eclipse或其他东西),或者如果您使用Maven,请使用如下所示的依赖项:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20070829</version>
</dependency>
如果您没有使用Maven,您仍然可以从此处下载JAR:http://mvnrepository.com/artifact/org.json/json/20090211
答案 1 :(得分:1)
而不是下线
langSel.add("en", true);
使用此行
langSel.add("\"en\"", true);
试试这可能有帮助。