如何使用 Rhino 从 javascript 函数中的 Java HashMap 获取值
How to get values from a Java HashMap in javascript function using Rhino
我正在使用 Rhino 库执行 Javaandroid 中的脚本函数。我有一个 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'];
return 值未定义。
这条线很好用,
var valueSelected = controlValues.get('country');
但它是无效的 javascript 代码。
在android和iOS中都执行相同的javascript。 iOS 不支持以上行。请建议。我正在使用最新版本的 Rhino。
访问复杂对象数据的唯一方法是使用其接口。您需要为 Android 和 ios 创建单独的解决方案。
typeof
运算符应该可以帮助您在这些情况之间切换。
终于自己找到了答案。
而不是将 HashMap 发送到 javascript 函数,需要将其作为 JSONObject 发送。不像普通的 JSONObject 的对象,而是像 NativeJSON 对象形式的对象。
Object nativeJsonObject= NativeJSON.parse(rhino,scope,controlValueJsonString,new NullCallable());
其中,
rhino - Rhino 的上下文对象。
scope - Scriptable 的对象
controlValueJsonString - JSON 相当于 HashMap 的字符串。 (controlValueJsonString = new Gson().toJson(hashMap);)
NullCallable 是一个 class 从 Callable 实现的,(来自 rhino 的包
org.mozilla.javascript.Callable)
这个 'nativeJsonObject' 应该传递给 javascript 函数。
Object[] params = new Object[] { controlValues };
从 JSON 对象中,javascript 可以获得值,
var valueSelected = controlValues['country'];
这对我有用。真的,我不知道为什么对这个问题投反对票。
管理员,请注意此问题。
无需实施 NullCallable class 的更简单解决方案是
new JsonParser(context, scope).parseValue("{\"this is\":\"JSON\"}");
我在 Rhino: return JSON from within Java
找到的
我正在使用 Rhino 库执行 Javaandroid 中的脚本函数。我有一个 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'];
return 值未定义。
这条线很好用,
var valueSelected = controlValues.get('country');
但它是无效的 javascript 代码。
在android和iOS中都执行相同的javascript。 iOS 不支持以上行。请建议。我正在使用最新版本的 Rhino。
访问复杂对象数据的唯一方法是使用其接口。您需要为 Android 和 ios 创建单独的解决方案。
typeof
运算符应该可以帮助您在这些情况之间切换。
终于自己找到了答案。
而不是将 HashMap 发送到 javascript 函数,需要将其作为 JSONObject 发送。不像普通的 JSONObject 的对象,而是像 NativeJSON 对象形式的对象。
Object nativeJsonObject= NativeJSON.parse(rhino,scope,controlValueJsonString,new NullCallable());
其中, rhino - Rhino 的上下文对象。 scope - Scriptable 的对象 controlValueJsonString - JSON 相当于 HashMap 的字符串。 (controlValueJsonString = new Gson().toJson(hashMap);)
NullCallable 是一个 class 从 Callable 实现的,(来自 rhino 的包 org.mozilla.javascript.Callable)
这个 'nativeJsonObject' 应该传递给 javascript 函数。
Object[] params = new Object[] { controlValues };
从 JSON 对象中,javascript 可以获得值,
var valueSelected = controlValues['country'];
这对我有用。真的,我不知道为什么对这个问题投反对票。 管理员,请注意此问题。
无需实施 NullCallable class 的更简单解决方案是
new JsonParser(context, scope).parseValue("{\"this is\":\"JSON\"}");
我在 Rhino: return JSON from within Java
找到的