使用Rhino在Java和javaScript之间传递字符串
我试图使用Rhino将Java字符串传递给JavaScript,并将其识别为“本机”JavaScript字符串 例如: Java对象:使用Rhino在Java和javaScript之间传递字符串,javascript,java,switch-statement,rhino,Javascript,Java,Switch Statement,Rhino,我试图使用Rhino将Java字符串传递给JavaScript,并将其识别为“本机”JavaScript字符串 例如: Java对象: public class MyTestObject { public Object returnStringValue() { return "Hello"; } } 犀牛设置 import java.io.FileNotFoundException; import javax.script.*; public class T
public class MyTestObject {
public Object returnStringValue() {
return "Hello";
}
}
犀牛设置
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函数(无法修改此函数)
电流输出:“不正常”
我认为这是因为Rhino应用了严格的开关比较,因为下面返回的开关比较是严格的。
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(从Java1.8开始实现的默认JavaScript引擎)上运行良好,但是我必须使用Rhino
function testFunction() {
let myString = testObject.returnStringValue();
return myString === "Hello";
}