我正在使用Java腳本引擎(在Java 1.6中)來動態評估我的Java程序中的某些表達式。我可以將Java對象從Java傳遞到JavaScript,並調用它們的方法,但是當我傳遞String對象時,這會停止正常工作。如何從傳遞給JavaScript的字符串變量訪問Java字符串方法?
例如,在我的Java中,我可以用doSomething方法定義一個類JavaClass。 當我將JavaClass對象傳遞給JavaSCript時,我可以調用doSomething方法。但是,如果我在Java中創建一個String對象並將其傳遞給JavaScript,那麼當我嘗試使用JavaScript調用其上的endsWith方法時會出現錯誤。
我的代碼如下: -
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
String myString = "apple hello";
JavaClass javaClass = new JavaClass();
engine.put("myString", myString);
engine.put("thing", javaClass);
engine.eval("thing.doSomething()");
engine.eval("myString.endsWith(\"hello\")");
的DoSomething的方法正確調用,但它無法找到的endsWith: -
__EXCEPTION__:javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot find function endsWith.
這是因爲如果我的Java String對象被轉換到JavaScript字符串對象 - 例如,我可以使用JavaScript字符串的length屬性。
我可以添加自己的endsWith函數來我JavaClass類,它只是簡單地調用字符串的endsWith,這工作正常 - 但不是很好... :(
如果正在轉換,可以阻止我出現這種情況? 如果是別的東西,我是不是做錯了什麼?有沒有辦法解決呢?
謝謝!:)