当前位置: 首页 > 面试题库 >

Rhino Javascript:如何将Object转换成Javascript原语?

廖琨
2023-03-14
问题内容

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

我有一个Java方法可返回Java对象(Double,Long,Integer等)。我想从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;}


 类似资料:
  • 我有一个这样的Html字符串: 我需要将此 html 字符串转换为脚本中的对象。也就是说,当在jquery中使用方法时,我应该得到相同的对象结果。我尝试了这样的事情: 但是没有用。我应该在javascript中使用什么方法将HTML字符串转换为对象符号?我应该得到对象形式的每个子节点。我不想在这个解决方案中使用Jquery。我期待控制台中显示的确切输出

  • 问题内容: 当屏幕抓取某些网站时,我从标签中提取数据。 我得到的数据不是标准格式。我不能使用。 目前,我用于将原始数据转换为格式。 但是,当我遇到复杂的数据结构时,我感到非常糟糕。 您有更好的解决方案吗? 问题答案:

  • 问题内容: 假设您网站的用户输入了日期范围。 您需要将此日期发送到服务器进行某些处理,但是服务器希望所有日期和时间都采用UTC。 现在,假设用户位于阿拉斯加,夏威夷或斐济。由于它们所处的时区与UTC完全不同,因此需要将日期范围转换为以下形式: 使用JavaScript Date对象,您如何将第一个“本地化”日期范围转换为服务器可以理解的范围? 问题答案: 该方法返回简化的扩展ISO格式(ISO86

  • 我正在使用一个实现自己的Array类的JDBC库。为了使用所述Array,他们将其转换为Object[]。 https://github.com/housepower/ClickHouse-Native-JDBC/blob/master/src/test/java/com/github/housepower/jdbc/QueryComplexTypeITest.java#L120 我使用的是Clo

  • 所以我想知道怎么才能把一个芬的ID转换到棋盘上。 代码: 我很感激我得到的任何帮助。如果你需要更多的信息,请告诉我。

  • 问题内容: 我发现一些代码我工作的地方的点被强制转换,因为它是传递给方法。 为什么要这样做? 我知道这个问题涉及重载的方法,并使用类型转换来确定要调用的方法的版本。 但是,如果不执行强制类型转换,如果使用空参数调用该方法,那么是否会重选带有其他类型的参数的重载方法呢?那么演员阵容还能完成什么呢? 问题答案: 如果 未 执行转换,则将选择 最具体的 版本。 可以是type 或type 的空引用。因此