javascript - Comment appeler des méthodes en js en java?
天蓬老师
天蓬老师 2017-07-05 10:26:55
0
3
1285

Comment appeler des méthodes en js en 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);
}

Changez la méthode d'appel en

Object result = invocable.invokeFunction("isNotEmpty", new Object[]{"hahaha"});

C'est comme ça que ça marche

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

répondre à tous(3)
为情所困

Après votre propre implémentation, vous pouvez utiliser deux méthodes pour y parvenir :

  1. Utilisez engine.eval
    Object result = engine.eval("STRING_UTIL.isNotEmpty('" + str + "')");

  2. Utilisez la méthode InvokeMethod pour implémenter
    Récupérez d'abord l'objet

Object thiz = engine.get("STRING_UTIL");
Ensuite, appelez la méthode en fonction de l'objet
Object result = invocable.invokeMethod(thiz, "isNotEmpty", new Object[]{"hahaha"});

Présentation d'un autre livre à tout le monde : "Compréhension approfondie de Java 7 : technologies de base et meilleures pratiques"
Le deuxième chapitre ici est très détaillé. Si tu veux y aller, tu peux y jeter un oeil

Peter_Zhu
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine javaScript = manager.getEngineByName("JavaScript");
InputStream stream =
                    JS.class.getResourceAsStream("/js/test.js");
BufferedReader reader =
                    new BufferedReader(new InputStreamReader(stream));
javaScript.eval(reader);
invocable = (Invocable) javaScript;
invocable.invokeFunction("method");

Description de la méthode invokeFunction Le premier paramètre est le nom de la méthode, les paramètres suivants sont tous des paramètres de méthode et la valeur de retour est un objet.

刘奇

Non
java est un langage back-end, js est un langage front-end et le code js ne peut pas être ajusté en java

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal