[问题解决]Applet中调用Javascript中的方法
在做一个报表系统,采用Java开发,当前使用在.net平台上,所以采用Applet嵌入Aspx页面中,问题来了:
数据源是.net系统中发布的服务,而服务认证又与session相关,所以在页面中通过javascript获取数据没有问题,applet就不行了,因为applet不能共用页面的session。
如是想到以前看过在applet中调用javascript过程,立马实现,虽然经过一些挫折,还是顺利完成。
方法:
采用 netscape.javascript
引入包:java安装目录下的 plugin.jar
这个包包括2个类:JSObject和JSException,
使用JSobject类,它有以下的方法:
getMember(String name) --获取某个对象的命名特性,相当于Javascript中的 obj.property或者obj[property],返回Java Object。
getSlot(int index) --获取对象的数组索引特性,相当于Javascript中的数组访问,返回Java Object。
setMember(String name) --设置命名特性
setSlot(int index) --设置数组
removeMember(String name) --删除命名
call(String methodName, Object args[]) --调用给定的方法,传入参数在Object数组中,返回一个Java Object对象。
eval(String code) --相当于Javascript中的eval函数。
准备Javascript访问代码:
例如保存模板,采用同步方式,XML提交(^O^:当然使用了自己的一些东西):
function saveTemplate(id, systemId, name, template){ var result; (new $Ajax()).sendXml( SERVER_HOST_ADDRESS + '/SaveTemplate.ashx?ID={0}&SystemID={1}&Name={2}'.format(id, systemId, name), 'POST', template, function(req) { result = req.responseText; } ); return result; };
Java中代码:
JSObject jso = JSObject.getWindow(this); String xml = XML文档哈; jso.call("saveTemplate", new Object[] { "0", "10", "测试", xml });就能成功返回信息。
Aspx页面:
<%@ Page Language="C#"%> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Designer</title> <script type="text/javascript" src="firefly_debug.js"></script> <script type="text/javascript" src="applet.js"></script> </head> <body> <div style="width:100%;height:100%;"> <applet style="width:100%;height:100%;" code="com.anncsr.designer.start.StartApplet.class"codebase="./lib"> <param name="serverUrl" value="<%=Request.ApplicationPath%>"/> </applet> </div> </body> </html>
结果当然是很不错罗。