`

javaScript与java跨界传递map

阅读更多

 

JDK6内置了javaScript引擎,用以解决js和java之间的跨界调用。

对于希望开放更加灵活的定制给最终用户的java应用,这是姗姗来迟的福音。

通过在java应用中开放脚本定制给最终用户,可以实现更大程度的灵活性,例如:编写业务规则,甚至是扩充业务函数库。

在我最近编写的一个应用中,采用了上述方式,即:将后台的java编写的功能以javaScript形式发布,

并提供基础javaScript函数库给用户,允许其进行二次开发。

但在具体实施时,还是遇到些许麻烦。书写于此,供后来者借鉴。

我在后台java提供了一个对象,该对象接受HashMap参数传入并执行相应操作,形式如下:

class IDC_Snmp
...
void set(HashMap nvs){
....
}
 按照jdk说明文档,
http://java.sun.com/developer/technicalArticles/J2SE/Desktop/scripting/
编写java语句如下:
...
IDC_Snmp  idc = new IDC_Snmp();
engine.put("idc",idc);
 然后编写js语句如下
idc.set({p1:"v1",p2:"v2"});
 原本以为engine可以识别js的map类型,并自动匹配java的HashMap形参并调用相应方法,
结果跟踪调试,发现js的map类型到java方法中不能自动匹配为HashMap,而是成为NativeObject。
所以没有获得预期结果。

解决办法之一是:java中增加转换处理,自己编码将NativeObject转换为HashMap。
参考了这篇博文:
http://relive123-yahoo-com-cn.iteye.com/blog/784700
	public static Map<String, Object> obj2map(ScriptEngine engine,
			Object nativeObject) throws ScriptException, NoSuchMethodException {
		Map<String, Object> map = new HashMap<String, Object>();
		engine.put("map", map);
		engine.put("obj", nativeObject);
		String script = " 	function dosomething(){											"
				+ "							for (i in obj){											"
				+ "								map.put(i,obj[i]);									"
				+ "							}														" + "					} 																";
		engine.eval(script);
		Invocable inv = (Invocable) engine;
		inv.invokeFunction("dosomething");
		return map;
	}
 但是总觉得这种方式过于曲折,并不是jdk原生的实现。

因此用了第二种解决办法:就是在javaScript中将map先转为engine可以识别的数组形式,后台的java方法也是以数组形式出现。
相关的代码为:
java部分
class IDC_Snmp
...
void set(String[] pns,Object[]pvs){
...
}
 其中pns,pvs分别对应HashMap中多个的Name和Value。
javaScript部分
function set(pvMap){
  var pns = [];
  var pvs = [];
  for(x in pvMap){
    pns[pns.length]=x;
    pvs[pvs.length]=pvMap[x];
  }
  idc.set(pns,pvs);
}
 这个感觉好些,出问题就该打JDK的板子了!
0
1
分享到:
评论

相关推荐

    map(java).rar_ map ja_MAP JAVA_java map_java系统_map

    标题中的"map(java).rar_ map ja_MAP JAVA_java map_java系统_map"暗示了这是一个与Java编程语言相关的项目,特别是涉及到地图(Map)的实现。在Java中,`Map`是一个接口,它定义了键值对的数据结构,允许我们通过键...

    JavaScript实现Java中Map容器的方法

    JavaScript实现Java中Map容器的方法主要依赖于JavaScript对象的特性,即对象中不能有重复的属性名,这与Java中的Map功能相似。在给出的代码示例中,通过构造函数functionMap创建了一个“Map”对象,并为该对象定义了...

    MFC的WebBrowser控件 C++与JavaScript之间数据交互传递

    WebBrowser控件允许在MFC应用中嵌入网页浏览功能,而C++与JavaScript之间的数据交互则为这种集成提供了更丰富的可能性。本文将深入探讨如何实现C++和JavaScript之间的数据交换,并通过提供的源代码实例进行详细讲解...

    Java读取json文件,并转化为map取值

    在Java编程中,处理JSON数据是一项常见的任务,特别是在与服务器进行数据交互时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。本教程将深入讲解...

    Java Map 遍历比较齐全的解析.docx

    在某些场景下,如果需要兼容JavaScript或者使用类似的方法,可能会使用`Object.keys(map).length`,但这是JavaScript中的写法,在Java中并不适用。 3. **Java 8及Lambda表达式遍历Map** 自Java 8开始,引入了...

    javascript实现Java中的Map对象功能的实例详解

    javascript 自定义对象实现Java中的Map对象功能 Java中有集合,Map等对象存储工具类,这些对象使用简易,但是在JavaScript中,你只能使用Array对象。 这里我创建一个自定义对象,这个对象内包含一个数组来存储数据...

    javascript加密java解密

    总之,“javascript加密java解密”的主题涉及了前端与后端的安全通信策略,通过JavaScript对数据进行加密,然后在Java环境中进行解密,以保障数据在传输过程中的安全。实际操作中,开发者需要根据具体需求选择合适的...

    Java调用javaScript代码

    4. 数据交互:Java可以将变量传递给JavaScript,并接收JavaScript的返回值。例如,你可以这样传递Java对象到JavaScript: ```java engine.put("myJavaObject", myJavaObject); ``` 然后在JavaScript代码中使用`...

    javaScript和java分别制作的锁屏

    javaScript和java分别制作的锁屏 javaScript和java分别制作的锁屏javaScript和java分别制作的锁屏 javaScript和java分别制作的锁屏

    不用第三方jar的json与object(map、list)互换java类

    本文将深入探讨如何在不依赖第三方库的情况下,实现JSON与Java对象(如Map、List)之间的互换。我们将分析标题提及的两个Java类——`jsonobject.java`和`JsonUtil.java`。 首先,`JsonUtil.java`很可能是这个功能的...

    java对象List,Map转json格式

    在Java编程中,将对象转换成JSON(JavaScript Object Notation)...通过以上步骤,你可以有效地在Java后端与JavaScript前端之间传递List和Map对象。了解并熟练掌握这些技巧,对于构建前后端数据交换的应用至关重要。

    base64,java与JavaScript实现

    ### 关于Base64编码及Java与JavaScript的实现 #### Base64简介 Base64是一种将二进制数据转换为ASCII字符串表示形式的方法。它主要用于处理非文本数据的存储和传输,例如图像、视频等多媒体文件。由于互联网传输...

    基于JavaScript与Java的分布式财务管理系统设计源码

    该分布式财务管理系统源码由JavaScript和Java双语言编写,总计包含244个文件,涵盖66个JavaScript文件、57个React组件文件(.jsx)、57个Java源文件、18个XML配置文件、12个CSS预处理器文件(.less)、8个YAML配置...

    zjj.rar_javascript_java网页_网页

    这个压缩包文件很可能包含了多个与JavaScript和Java编程相关的网页示例或教程资源,帮助学习者理解这两种语言如何在网页设计中协同工作。 【描述】"javascript 典型网页javascript 典型网页javascript 典型网页...

    前端跨界开发指南:JavaScript工具库原理解析与实战.docx

    总的来说,JavaScript工具库在跨界开发中扮演着核心角色,它们提供了强大的功能和便利性,同时也带来了一些挑战。开发者需要不断学习和掌握新的工具库,以应对日益复杂的开发需求,并通过优化和调整,确保项目的高效...

    java变量和javascript变量之间的传递示例

    在进行Web开发时,尤其是使用JSP技术开发动态网站时,我们常常需要处理服务器端Java变量与客户端JavaScript变量之间的数据交互问题。JSP(JavaServer Pages)是一种用于开发动态网页的技术,它允许我们在HTML页面中...

    基于JavaScript和Java的javaweb高速公路模拟ETC收费系统设计源码

    本项目是基于JavaScript和Java开发的javaweb高速公路模拟ETC收费系统设计源码,共包含325个文件。其中JavaScript源代码文件101个,GIF图片文件75个,HTML页面文件37个,Java源代码文件36个,CSS样式文件18个,...

    基于JavaScript和Java语言的动态网页设计方法 (1).pdf

    "基于JavaScript和Java语言的动态网页设计方法" 在本文中,我们将讨论基于JavaScript和Java语言的动态网页设计方法。该方法结合了JavaScript和Java语言的优势,提供了一种解决方案,用于提高Web页面的交互性和响应...

Global site tag (gtag.js) - Google Analytics