使用Rhino在Java和javaScript之间传递字符串

时间:2017-03-31 14:51:39

标签: javascript java switch-statement rhino

我尝试使用Rhino将Java字符串传递给JavaScript,并将其识别为" native" JavaScript字符串。

示例:

Java对象:

public class MyTestObject {
    public Object returnStringValue() {
        return "Hello";
    }
}

Rhino设置

import java.io.FileNotFoundException;
import javax.script.*;

public class TestRhino{

    public static void main(String[] args) throws FileNotFoundException, ScriptException, NoSuchMethodException {
        // Create my Java Object
        MyTestObject testObject = new MyTestObject();

        // Initiate the JavaScript engine
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
        Compilable compEngine = (Compilable)engine;

        // evaluate my JavaScript file; add my Java object to it
        engine.eval(new java.io.FileReader("MyJavaScriptFile.js"));
        engine.put("testObject", testObject); // this adds my Java Object to Rhino

        // Invoke my javaScript function
        Invocable inv = (Invocable) engine;
        Object returnVal = inv.invokeFunction("testFunction");

        // print out the result
        System.out.println(returnVal);
    }
}

JavaScript函数(此不能被修改)

function testFunction() {
    let myString = testObject.returnStringValue();

    switch (myString)
    {
        case "Hello":
            return "OK";
    }

    return "Not OK";
}

当前输出:"不行"。

我认为这是由于Rhino应用严格的开关比较,因为以下内容返回Switch comparison is strict.

function testFunction() {
    switch(1) {
        case '1':
            return 'Switch comparison is NOT strict.';
        case 1:
            return 'Switch comparison is strict.';
    }
}

另请注意,以下函数返回true

function testFunction() {
    let myString = testObject.returnStringValue();
    return myString == "Hello";
}

但是以下函数返回false

function testFunction() {
    let myString = testObject.returnStringValue();
    return myString === "Hello";
}

我无法修改JavaScript代码,只修改Java代码,因此我正在寻找一种解决方案,通过仅修改Java代码来使switch语句工作。

作为一个注释,这适用于Nashorn(从Java 1.8开始实现的默认JavaScript引擎),但是我必须使用Rhino。

0 个答案:

没有答案