java - 犀牛 JavaScript : How to convert Object to a Javascript primitive?

标签 java javascript rhino

我正在使用 javax.scripting 和 Rhino 在这个项目中。

我有一个返回 Java 对象(Double、Long、 整数等)。我想从 javascript 调用该方法并且 将结果引用为 Javascript 原始类型。然而, javacript 将返回类型识别为对象。

如何强制它转换为 JavaScript 原语?

这个问题与 http://groups.google.com/group/mozilla.dev.tech.js-engine.rhino/browse_thread/thread/2f3d43bb49d5288a/dde79e1aa72e1301

问题是我如何获得对上下文的引用并 包装工厂?

示例代码:

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;}

关于java - 犀牛 JavaScript : How to convert Object to a Javascript primitive?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1579777/

相关文章:

javascript - 预加载器继续加载并且在加载内容时不会消失

javascript - 犀牛中的jquery

java - 最终局部变量可能尚未在匿名内部类中初始化

java - 尝试向一个主要整数添加更多整数

javascript - 使用node.js和backbone.js将单页面应用程序转换为多页面网站

php - 如何通过 PHP 获取浏览器渲染后计算出的图像宽度?

java - 我如何为 Rhino 的 ScriptableObject 定义静态属性?

java - 如何使按钮监听器为您提供按下的按钮的坐标

java - 获取面板坐标

javascript - 匹配 JSON 字符串的正则表达式