我正在使用与Rhino的javax.scripting
在这个项目中.
我有一个返回Java对象的Java方法(Double,Long,
整数等).我想从javascript调用该方法
将结果引用为Javascript基元类型.然而,
javacript将返回类型识别为Object.
如何强制它转换为javascript原语?
问题是我如何获得对上下文的引用
WrapFactory?
示例代码:
public class data
{
Double value = 1.0d;
public Number get() { return value; }
}
public static void main(String[] args)
{
ScriptEngine engine = new ScriptEngineManager().getEngineByName ("rhino");
data data = new data();
try
{
engine.eval("function test(data) { return data.getD('value1') + 5;};");
System.out.println("Result:" + ((Invocable)engine).invokeFunction("test", data));
}
catch (Exception e)
{
e.printStackTrace();
}
}
输出:
结果:15
解决方法:
请尝试以下方法
public static void main(String [] args) throws Exception {
ScriptEngine engine = new ScriptEngineManager().getEngineByName ("rhino");
data data = new data();
Context.enter().getWrapFactory().setJavaPrimitiveWrap(false);
try
{
engine.eval("function test(data) { return data.get('value1') + 5;};");
System.out.println("Result:" + ((Invocable)engine).invokeFunction("test", data));
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static class data
{
Double value = 1.0d;
public Number get(String arg) { return value; }
}
或者,您可以修改javascript函数以将值显式转换为数字:
function test(data) { return parseInt(data.get('value1'), 10) + 5;}