Bagaimana untuk memanggil kaedah dalam js di java
// js 代码
STRING_UTIL = {};
STRING_UTIL.isNotEmpty = function (str){
return "" != str;
}
// java 代码
Reader scriptReaderB = new InputStreamReader(
new FileInputStream(
new File("F:\tech-study\js-comm\release\bundle.js")),"utf-8");
engine.eval(scriptReaderB);
// engine.eval(scriptReaderA);
if (engine instanceof Invocable)
{
// 调用JS方法
Invocable invocable = (Invocable)engine;
Object result = invocable.invokeFunction("STRING_UTIL.isNotEmpty", new Object[]{"hahaha"});
System.out.println(result.toString());
}
// 调用异常
java.lang.NoSuchMethodException: no such method: STRING_UTIL.isNotEmpty
at com.sun.script.javascript.RhinoScriptEngine.invoke(RhinoScriptEngine.java:286)
at com.sun.script.javascript.RhinoScriptEngine.invokeFunction(RhinoScriptEngine.java:258)
at AAAAAAA.main(AAAAAAA.java:29)
// 如果在添加一个全局函数
function isNotEmpty (str){
return STRING_UTIL.isNotEmpty(str);
}
Tukar kaedah panggilan kepada
Object result = invocable.invokeFunction("isNotEmpty", new Object[]{"hahaha"});
Beginilah ia berfungsi
Selepas pelaksanaan anda sendiri, anda boleh menggunakan dua kaedah untuk mencapainya:
Gunakan engine.eval
Hasil objek = engine.eval("STRING_UTIL.isNotEmpty('" + str + "')");
Gunakan kaedah invokeMethod untuk melaksanakan
Mula-mula dapatkan objek
Object thiz = engine.get("STRING_UTIL");
Seterusnya, panggil kaedah mengikut objek
Hasil objek = invocable.invokeMethod(thiz, "isNotEmpty", new Object[]{"hahaha"});
Memperkenalkan buku lain kepada semua orang: "Pemahaman Mendalam Java 7: Teknologi Teras dan Amalan Terbaik"
Bab kedua di sini sangat terperinci. Kalau nak pergi boleh tengok
invokeFunction kaedah penerangan Parameter pertama ialah nama kaedah, parameter berikut adalah semua parameter kaedah, dan nilai pulangan ialah objek.
Tidak
java ialah bahasa back-end, js ialah bahasa front-end dan kod js tidak boleh dilaraskan dalam java