[问题解决]Applet中调用Javascript中的方法

在做一个报表系统,采用Java开发,当前使用在.net平台上,所以采用Applet嵌入Aspx页面中,问题来了:

数据源是.net系统中发布的服务,而服务认证又与session相关,所以在页面中通过javascript获取数据没有问题,applet就不行了,因为applet不能共用页面的session。

image

如是想到以前看过在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>

结果当然是很不错罗。

posted @ 2011-04-16 12:02  lexloo  阅读(2684)  评论(0编辑  收藏  举报
ccc