2012-12-12 18 views
5

Ho una mappa Java. Voglio convertirlo in una mappa JavaScript.Convertire la mappa Java in Javascript Map

La funzione del Java per convertire come JS mappa segue:

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; 
} 

Nella pagina JSP javascript il codice è:

var langs = ${messagesJS}; 

in JavaScript, ho ottenuto:

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

invece di

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

Si prega di suggerire come realizzare questo?

+1

C'è qualche motivo per cui ** è necessario ** avere le chiavi avvolte tra virgolette doppie? Hai già un oggetto JavaScript valido. Se è un requisito assoluto (e, ancora una volta, non riesco a pensare a un singolo motivo per cui lo sarebbe), dai un'occhiata a return [JSON] (http://json.org). –

risposta

5

Potrebbe essere possibile utilizzare la classe JSONObject per questo. Ha un costruttore che si passa in un Map. Chiamalo e chiama il metodo toString() e dovrebbe darti un array JS.

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

Quindi qualcosa di simile:

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()); 

Sarà necessario assicurarsi che la classe org.json.JSONObject è sul classpath. O scaricare il JAR e aggiungere al classpath manualmente (tramite Eclipse o qualcosa) o se si utilizza Maven utilizzare una dipendenza come la seguente:

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

Se non si utilizza Maven, è ancora possibile scaricare il JAR da qui : http://mvnrepository.com/artifact/org.json/json/20090211

+0

Come ottenere la classe JSONObject. Sta dando percorso di classe non trovato. – Rajasekhar

+0

Aggiornamento della risposta – cowls

+0

Grazie cowls, sono in grado di aggiungere nel percorso di classe. Ma, ancora sto ottenendo la stringa come {en = true, de = false, fr = false} (mappa JSP) invece di {"en": true, "de": false, "fr": false} (mappa javaScript) nella pagina JSP. – Rajasekhar

1

Invece di sotto della linea

langSel.add("en", true); 

uso questa linea

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

Prova questo potrebbe essere utile.