分享
 
 
 

Cell插件在J2EE系统中的应用

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

[摘要] 在基于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.*;

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);

}

}

在上面的代码中,win.call(“f”, null)调用了JavaScript中的方法f()。

1.2从JavaScript访问Java Applet

当使用Java Plugin1.4.x运行Java Applet时,只需把Java Applet中的方法视为Java Plugin这个控件的方法,直接在Java Script中进行调用即可。下面用一个简单的例子进行说明:

(1) 在载入Java Plugin的Object标签中,用参数ID指定一个名字:

(2) 在HTML页面上增加一个按钮,点击它时从Java Script调用Java Applet中的方法:

onClick="calculate" language="JavaScript">

(3) 假定你的Java Applet是MyApplet.java,它有一个public方法method1(),那么就可以用如下的Java Script代码直接调用该方法:

二、Cell插件简介

华表的Cell插件是一个功能非常类似于Excel的、用于Web开发的ActiveX控件。它可以在Windows的浏览器中显示、编辑、打印表格。

三、系统实现

1.1 系统架构

图一是系统的配置示意图。由图可见,这是一个典型的三层应用系统。在本系统中,Java Applet和Cell插件部署在Web Server上,在运行时,它们被下载到客户端,运行在浏览器中。

图二是系统的运行示意图。由图可见,运行在客户机上的Java Applet通过Web Server上的Servlet访问应用服务器上的EJB,与后台交互。Java Applet作为表示层,在客户机上显示界面。

当需要打印输出时,Java Applet将数据和显示格式设置到华表插件中,并调用华表插件的打印与览和打印方法,完成打印功能。

1.2 用Cell插件实现Java界面的打印

1.2.1在HTML页面上嵌入华表的Cell插件

为了在Applet界面中调用华表的Cell插件,我们首先在HTML页面上隐藏了一个Cell插件:

通过style="HEIGHT: 0px; WIDTH: 0px"指定Cell插件的高度和宽度都为0,从而达到隐藏Cell插件的目的。

1.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;

}

}

通过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等格式的文件。

六、参考文献

1. Cell插件文档:http://www.cellsoft.cc

2. Java Plugin 文档:http://java.sun.com/j2se/1.4.1/docs/guide/plugin/

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有