在做一個報表系統,採用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>
結果當然是很不錯羅。