作者:手机用户2602940113 | 来源:互联网 | 2023-01-19 19:42
我正在使用与Rhino的javax.scripting在这个项目中.我有一个返回Java对象的Java方法(Double,Long,整数等).我想从javascript调用该方法将
我正在使用与Rhino的javax.scripting
在这个项目中.
我有一个返回Java对象的Java方法(Double,Long,
整数等).我想从Javascript调用该方法
将结果引用为Javascript基元类型.然而,
javacript将返回类型识别为Object.
如何强制它转换为Javascript原语?
这个问题非常相似
http://groups.google.com/group/mozilla.dev.tech.js-engine.rhino/browse_thread/thread/2f3d43bb49d5288a/dde79e1aa72e1301
问题是我如何获得对上下文的引用
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;}