当前位置: 首页 > 知识库问答 >
问题:

从Rhino向Java调用类返回多个值

国斌斌
2023-03-14

我正在尝试修改一些嵌入在Java中的Javascript代码,以将多个值返回给调用Javahtml" target="_blank">代码。

Java代码(调用Javascript):

...
Object result = execFunc.call(context, scope, scope, execArgs);
return ScriptRuntime.toString(result);

Javascript代码(由Java调用):

...
return "string";

我希望返回多个值。

我尝试修改Javascript以返回HashMap,如下所示:

...
var res = new java.util.HashMap();
res.put("String", "string");
res.put("Integer", 1);
return res;

但是当我在Java端进行强制转换时,我得到了一个ClassCastException:

...
HashMap result = (HashMap) execFunc.call(context, scope, scope, execArgs);
return ScriptRuntime.toString(result);

结果:

java.lang.ClassCastException: org.mozilla.javascript.NativeJavaObject cannot be cast to java.util.HashMap

我不喜欢在HashMap中返回它。我要返回的值是一个字符串和一个整数。理想情况下,我希望返回一个元组或一个HashMap,但如果让它工作的唯一方法是在数组中返回两个字符串,然后解析出整数,那也可以。

对于返回多个值的任何指导都将不胜感激。

这是正确的方法吗,我应该注入一个可以在Javascript端填充的Java对象吗?

共有1个答案

滕星纬
2023-03-14

试试这个

NativeJavaObject njo = (NativeJavaObject) execFunc.call(context, scope, scope, execArgs);
Map map = (Map) njo.unwrap();
 类似资料:
  • 问题内容: 我在Java中具有JSON序列化对象的字符串表示形式,例如。我如何解析并将其返回到JavaScript上下文,就像在JS中一样?谢谢。 问题答案: Rhino的最新版本只有四个arg,第四个不能为null。为了解决这个问题,您必须创建一个实现org.mozilla.javascript.Callable的简单类: 然后可以像这样调用NativeJSON.parse:

  • 问题内容: 我用Java写了一个函数,我希望这个函数返回多个值。除了使用数组和结构外,还有没有办法返回多个值? 我的代码: 问题答案: 在Java中,当您希望函数返回多个值时,必须 将这些值嵌入到您返回的对象中 或更改传递给函数的对象 在您的情况下,您显然需要定义一个可以包含,和的类: 然后将您的功能更改为

  • 我用的是parse.com。每个包里面都有很多钻子,每个品类里面都有很多包。 我卡住了。然后(函数(result,result2,result3)在最后一行。promise可以有多个promise,它是可变的。有没有一种方法可以写出如下内容: 谢谢!

  • 问题内容: 我如何使这个小功能“ imageExists”返回ajax请求是否成功? 问题答案: 我相信您将必须使用同步模式并使用单独的变量来存储返回值。

  • 问题内容: 我正在尝试序列化以序列化下面包含的json字符串。 我正在使用此gson调用对其进行序列化 我的班主任就是这样。 对于任何其他类变量,它都是这样。当我尝试使用上述调用时,最终会得到具有所有空值的对象。要注意的一件事是json字符串中未提供某些字段,因为不同的api调用提供了这些json字符串的不同部分。我做错了什么? 问题答案: 您提供的JSON根对象具有属性-因此,您有两个选项可以使

  • 问题内容: 我正在使用Mozilla Rhino 1.7r2(不是JDK版本),并且想从Java调用JS函数。 我的JS函数是这样的: 我该怎么做呢? 编辑:(JS函数在单独的文件中) 问题答案: String script = “function abc(x,y) {return x+y;}”; Context context = Context.enter(); try { Scriptabl