0

私がやろうとしているのは、ブラウザのアドレスバーでJavaコードを介してjsonオブジェクトを解析することです。取得したいJSONオブジェクトは次のとおりです。

{idUtente : "idUtente"}

だから私はこのコードを実装しました

public void inviaMailConferma(Utente utente) throws Exception {

    SimpleMailMessage message = new SimpleMailMessage();
    message.setTo(utente.getEmail());
    message.setSubject("Conferma registrazione a Portfolio Online");
    InetAddress ip = InetAddress.getLocalHost();
    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("JavaScript");
    String idUtente = utente.getUsername();
    Object eval = engine.eval("print(encodeURIComponent(idUtente))");
    message.setText("Ciao " + utente.getUsername() + "! Per registrarsi al sito, cliccare il seguente link: " + ip.getHostAddress() + ":8084/VenditaGioielli/confermaRegistrazione?data=" + eval.toString());
    mailSender.send(message);

}

engine.eval を実行すると、この例外が発生します

ex = (javax.script.ScriptException) javax.script.ScriptException:
sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "idUtente" is not
defined. (<Unknown source>#1) in <Unknown source> at line number 1

java オブジェクトを engine.val に解析する方法がわかりません。

編集

今、私はこのコードに来ました

 ScriptEngine engine = factory.getEngineByName("JavaScript");
 String idUtente = utente.getUsername();
 engine.put("idUtente", idUtente);
 Object eval = engine.eval("print(encodeURIComponent(idUtente))");

しかし、engine.eval は null を返します!

編集

今、私はこのコードに来ました

 ScriptEngineManager factory = new ScriptEngineManager();
 ScriptEngine engine = factory.getEngineByName("JavaScript");
 ScriptContext scriptContext = new SimpleScriptContext();
 Bindings binding = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
 String idUtente = utente.getUsername();
 engine.put("idUtente", idUtente);
 Object eval = engine.eval("print(encodeURIComponent(idUtente))", binding);

そして私は次の例外があります:

"sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "idUtente" is not defined. (<Unknown source>#1)"
4

1 に答える 1

0

エンジンには独自のコンテキストがあり、何が何であるかはわかりませんidUtente。を介してコンテキストに入れるだけengine.put("idUtente", idUtente)です。それはうまくいくはずです。

特に ScriptEngine とバインディングに関するブログ記事を書きました: http://wondee.info/2013/10/30/the-scriptengine-bindings/

于 2013-11-06T10:26:06.037 に答える