如何使用Rhino从Javascript中的Java HashMap获取值

引擎

我正在使用Rhino库在android中执行JavaScript函数。我有一个javascript函数,

var exucuteJS = function(controlValues) {
var valueSelected = controlValues['country'];
valueSelected = valueSelected.toUpperCase();
 switch (valueSelected) {
    case "INDIA":
        return "IND_HOME";
    case "NEPAL":
        return "NEP_HOME";
    default:
        return "DEF_HOME"
 }
}

我正在将Java HashMap对象作为参数传递,例如对函数executeJS的controlValues。问题是Rhino无法使用javascript代码从键中获取值。

var valueSelected = controlValues['country'];

返回值是不确定的。

这条线很好用,

var valueSelected = controlValues.get('country');

但无效的javascript代码。

相同的javascript将在android和iOS中执行。上述行在iOS中不受支持。请提出建议。我正在使用最新版本的Rhino。

引擎

最终,我自己找到了答案。

而不是将HashMap发送到javascript函数,需要将其作为JSONObject发送。与普通JSONObject的对象不同,它不是NativeJSON对象形式的对象。

Object nativeJsonObject= NativeJSON.parse(rhino,scope,controlValueJsonString,new NullCallable());

犀牛-犀牛的Context对象。作用域-可脚本化的对象controlValueJsonString-等效于HashMap的JSON字符串。(controlValueJsonString = new Gson()。toJson(hashMap);)

NullCallable是从Callable实现的类(来自Rhino的org.mozilla.javascript.Callable的程序包)

此“ nativeJsonObject”应传递给javascript函数。

Object[] params = new Object[] { controlValues };

从JSON对象中,javascript可以将值获取为

var valueSelected = controlValues['country'];

这为我工作。真的,我不知道为什么唐纳德对这个问题投了赞成票。管理员,请注意此问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章