Cell插件在J2EE系统中的应用
副标题#e#
摘要:在基于J2EE平台的信息系统中,具有富厚表示本领的Java Applet是界面层的一种重要形式。但Java API对打印的支持较量弱,打印输出巨大的单子和报表需要大量事情。本文先容的系统通过引入一个ActiveX控件–Cell插件–来办理这个问题。该系统中,由Java Applet完成界面表示,由Cell插件完成打印输出,两者之间通过Sun公司的一套接口API相互通信。
一、Java Applet与Ocx控件的交互
1.1从Java Applet会见Java Script要领和Ocx控件
Sun公司在JDK中提供了一套从Java Applet会见Java Script的API,由此可以实现Java Applet会见HTML页面中的DOM工具的机制。该API以一个Jar文件的形式提供:%JAVA_HOME%\jre\lib\jaws.jar,个中%JAVA_HOME%是你安装JDK的目次。将该jar文件插手到情况变量classpath中,就可以用它实现从Java Applet到Java Script的挪用了。下面是一段挪用Java Script中的要领的代码实例:
import netscape.javascript.*;
在上面的代码中,win.call(“f”, null)挪用了JavaScript中的要领f()。
import java.applet.*;
import java.awt.*;
class MyApplet extends Applet {
public void init() {
JSObject win = JSObject.getWindow(this);
JSObject doc = (JSObject) win.getMember("document");
win.call("f", null);
}
}
1.2从JavaScript会见Java Applet
当利用Java Plugin1.4.x运行Java Applet时,只需把Java Applet中的要领视为Java Plugin这个控件的要领,直接在Java Script中举办挪用即可。下面用一个简朴的例子举办说明:
(1) 在载入Java Plugin的Object标签中,用参数ID指定一个名字:
<OBJECT ID="MyPlunin" WIDTH=500 HEIGHT=120
CLASSID="CLSID:8AD9C840-044E-11d1-B3E9-00805F499D93">
<PARAM NAME="code" value="MyApplet.class">
...
</OBJECT>
(2) 在HTML页面上增加一个按钮,点击它时从Java Script挪用Java Applet中的要领:
<input type="button" name="Button1" value="Start"
(3) 假定你的Java Applet是MyApplet.java,它有一个public要领method1(),那么就可以用如下的Java Script代码直接挪用该要领:
onClick="calculate" language="JavaScript">
<SCRIPT language="JavaScript">
function calculate() {
document.. MyPlunin.method1()
}
</SCRIPT>
#p#副标题#e#
二、Cell插件简介
华表的Cell插件是一个成果很是雷同于Excel的、用于Web开拓的ActiveX控件。它可以在Windows的欣赏器中显示、编辑、打印表格。
三、系统实现
3.1 系统架构
图一
图一是系统的设置示意图。由图可见,这是一个典范的三层应用系统。在本系统中,Java Applet和Cell插件陈设在Web Server上,在运行时,它们被下载到客户端,运行在欣赏器中。
图二是系统的运行示意图。由图可见,运行在客户机上的Java Applet通过Web Server上的Servlet会见应用处事器上的EJB,与靠山交互。Java Applet作为暗示层,在客户机上显示界面。
当需要打印输出时,Java Applet将数据和显示名目配置到华表插件中,并挪用华表插件的打印与览和打印要领,完成打印成果。
3.2 用Cell插件实现Java界面的打印
3.2.1在HTML页面上嵌入华表的Cell插件
为了在Applet界面中挪用华表的Cell插件,我们首先在HTML页面上埋没了一个Cell插件:
<OBJECT classid=clsid:3F166327-8030-4881-8BD2-EA25350E574A
id=DCellWeb1 style="HEIGHT: 0px; WIDTH: 0px">
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="14902">
<PARAM NAME="_ExtentY" VALUE="6075">
<PARAM NAME="_StockProps" VALUE="0">
</OBJECT>
通过style="HEIGHT: 0px; WIDTH: 0px"指定Cell插件的高度和宽度都为0,从而到达埋没Cell插件的目标。
3.2.2 在Applet中提供两个挪用接口要领
下面是一个Applet的代码实例,个中提供了callCellMethod()和callJavaScriptMethod()两个接口要领,别离可用来挪用Cell插件的要领和JavaScript的要领:
public class MyApplet extends javax.swing.JApplet {
private JSObject win = null;
private JSObject cell = null;
public Object callCellMethod(String name, Object[] params) {
return getCell().call(name, params);
}
public Object callJavaScript(String name, Object[] params) {
return getJSwin().call(name, params);
}
private JSObject getCell() {
if (cell == null) {
try {
JSObject doc = (JSObject)getJSwin().getMember("document");
JSObject all = (JSObject)doc.getMember("all");
cell = (JSObject)all.call("item", new Object[]{"DCellWeb1"});
}
catch (Exception e) {
e.printStackTrace();
}
}
return cell;
}
private netscape.javascript.JSObject getJSwin() {
if (win == null) {
win = netscape.javascript.JSObject.getWindow(this);
}
return win;
}
}
#p#分页标题#e#
通过getCell()这个要领,可以在Java Applet中直接得到用JSObject暗示的Cell插件,从而可以直接挪用它的要领。譬喻,在Java Applet中向Cell插件的一个单位格写入数据,可以如下挪用:
Integer row = new Integer(1);
Integer column = new Integer(1);
Integer page = new Integer(0);
callCellMethod("SetCellString", new Object[]{column, row, page, “str”});
个中SetCellString是Cell插件提供的接口要领。这样就实现了从Java Applet到华表的Cell插件的挪用。
四、结论
在这个应用系统中,我们只操作Cell插件的打印预览和打印两项成果,不消它做屏幕显示。所有打印名目和数据都在Java Applet中筹备好,按单位格向Cell插件配置名目和数据,由Cell插件完身分页和打印成果。
这是一种表示与数据疏散的方法:Java Applet中只组织打印数据,所有打印的表示事情交给Cell插件完成,因此可以或许大大低落事情量。
Cell插件除打印成果外,还具有输入、显示、编辑、图表等很是强大的成果,可以建造出很是巨大的报表。操作Cell插件,还可以将数据导出为Excel或PDF等名目标文件。