Cell插件在J2EE系统中的应用
在基于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指定一个名字:
<OBJECT ID="MyPlunin" WIDTH=500 HEIGHT=120CLASSID="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" onClick="calculate" language="JavaScript">
(3) 假定你的Java Applet是MyApplet.java,它有一个public方法method1(),那么就可以用如下的Java Script代码直接调用该方法:
<SCRIPT language="JavaScript"> function calculate() { document.. MyPlunin.method1() } </SCRIPT>
二、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; } }
通过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等格式的文件。
Cell插件在J2EE系统中的应用相关推荐
- Cell插件在Web开发中的应用
一.用Cell插件实现Java界面的打印简介 (1) 在HTML页面上嵌入华表的Cell插件: 为了在Applet界面中调用华表的Cell插件,我们首先在HTML页面上隐藏了一个Cell插件: &am ...
- 解决J2EE系统应用性能问题常用方法
在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java专业知识,广州疯狂java培训为你讲解; 性能问题的最明显表现是网页的响 ...
- Linux编译mybatis,使用mybatis assembly插件打成tar包,在linux系统中运行服务-Go语言中文社区...
使用mybatis assembly插件打成tar包,在linux系统中运行服务 assembly插件插件地址: 链接:https://pan.baidu.com/s/1i6bWPxF 密码:gad5 ...
- linux下vim编辑器插件,为你介绍Linux系统中vim编辑器的实用插件!
今天小编要跟大家分享的文章是关于Linux系统中vim编辑器的实用插件.Vim 是 Linux 下的常用文本编辑器,但也经常被称为是一个上古神器,因为它对于初学者而言相当不友好,也不好入门. Linu ...
- linux系统中VIM编辑器推荐安装插件
k-vim VERSION: 9.0 LAST_UPDATE_TIME: 2015-05-02 作者 wklken (凌岳/pythoner/vim党预备党员) Email: wklken@yeah. ...
- 初学者如何开发出一个高质量的J2EE系统
J2EE学习者越来越多,J2EE本身技术不断在发展,涌现出各种概念,本文章试图从一种容易理解的角度对这些概念向初学者进行解释,以便掌握学习J2EE学习方向. 首先我们需要知道Java和J2EE是两个不 ...
- 初学者如何开发出高质量J2EE系统
J2EE学习者越来越多,J2EE本身技术不断在发展,涌现出各种概念,本文章试图从一种容易理解的角度对这些概念向初学者进行解释,以便掌握学习 J2EE学习方向. 首先我们需要知道Java和J2EE是两个 ...
- linux mtd 块设备,Linux系统中/dev/mtd与/dev/mtdblock的区别,即MTD字符设备和块设备的区别...
转:http://www.crifan.com/linux_system_in__dev__mtd_and__dev__mtdblock_distinction_character_devices_a ...
- win10html5无法播放,win10系统中网页中无法播放视频怎么办
近日有win10系统用户要通过浏览器来打开网页观看视频的时候,却发现在网页中打开视频的时却无法播放,这是怎么回事呢,经过分析是由于Adobe Flash Player ActiveX插件未安装.版本过 ...
- WCDMA系统中的扰码规划
摘要:宽带码分多址(WCDMA)系统采用码分多址的无线接入方式,不需频率规划,但需进行相邻小区扰码的规划用以区分各小区.通过WCDMA无线网络的扰码规划,可以确定两个使用相同扰码的小区的复用距离,区分 ...
最新文章
- 但是我们还是不想留遗憾,我们不后悔!
- initWithNibName与viewDidLoad的执行关系以及顺序
- 关于mult-xip bin的一些资料整理
- java中的静态代码块、构造代码块、构造方法
- 开发利器之IntelliJ IDEA学习笔记
- 使用 header函数实现文件下载
- 在Linux上安装Mysql 以及 涉及问题
- 域名/网站名/URL
- MAC 下开发 不区分大小写问题及解决
- Mat 转 IplImage
- ROS学习记1——玩弄小海龟
- 韩寒做错了(update 4 12)。
- 纬度渐长率算法C语言,关于纬度渐长率.pdf
- 架构师速成4.4-我该学什么语言
- 爬取《悲伤逆流成河》猫眼信息 | 郭敬明五年电影最动人之作
- mysql根据中文拼音分组_【改进篇】使用MySql实现好友昵称按拼音排序或分组
- Linux 时间校准与同步
- BeatMark X for mac(fcpx音乐卡点神器)
- 【Axure交互教程】 锚点滚动效果
- windows下面常用的渗透测试命令(安全工具)
热门文章
- 使用dom和jaxen实现一个增删改查的功能;
- 利用JS代码完成动态生成表格案例及解析
- 组策略设置计算机计划任务,windows 2008 server 域环境通过组策略下发计划任务
- 联发科MT7621 Openwrt开发编译记录
- Spring注解扫描原理浅析
- HTML页面在iPhone中电话号码自动检测带来的布局问题
- Java 检测字符是否存在手机号或返回该手机号
- 拼多多显示内部服务器错误是怎么回事,拼多多提现出现错误怎么办?拼多多提现常见问题...
- SPSS学习笔记(三)方差分析ANOVA(F检验)
- asp.net970-宠物医院管理系统#毕业设计