简体   繁体   中英

Calling JavaScript function in a .js file from Java

What is the best way to call a JavaScript function in a different .js file from a Java file?

Say, I have a String like so in a Java file:

String test = "[name1, name2, name2]";

What I am trying to do is the following:

  1. Convert the Java String into a JavaScript array
  2. Pass the JavaScript array to a JavaScript function in a different .js file.

Thanks, Sony

If you want to use JavaScript in a Java application, you can use Rhino .

If you want to call client side JavaScript form a serverside Java web application, you can use DWR 's Reverse Ajax.

Good luck!

If you want to integrate Javascript and Java, then you can use Rhino. See the example below for a better comprehension:

test.js

function test(array){
    for(var i in array){
        out.println(array[i]);
    }
}

RhinoTest.java

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import org.mozilla.javascript.Context;
import org.mozilla.javascript.ContextFactory;
import org.mozilla.javascript.Scriptable;

public class RhinoTest {

    public static void main(String[] args) {

        Context ctx = new ContextFactory().enterContext();

        Scriptable scope = ctx.initStandardObjects();

        try {
            Object out = Context.javaToJS(System.out, scope);
            scope.put("out", scope, out);

            FileReader fr = new FileReader("test.js");
            ctx.evaluateReader(scope, fr, "<cmd>", 1, null);
            fr.close();

            String[] strArray = {"name1","name2","name3"};
            Object jsArray = Context.javaToJS(strArray, scope);
            scope.put("jsArray", scope, jsArray);

            ctx.evaluateString(scope, "test(jsArray)", "<cmd>", 1, null);

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Context.exit();
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM