Cell插件在J2EE系统中的应用

原创 2003年03月14日 13:50:00

Cell插件在J2EE系统中的应用<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

 

[摘要] 在基于J2EE平台的信息系统中,具有丰富表现能力的Java Applet是界面层的一种重要形式。但Java API对打印的支持比较弱,打印输出复杂的单据和报表需要大量工作。本文介绍的系统通过引入一个ActiveX控件--Cell插件--来解决这个问题。该系统中,由Java Applet完成界面表现,由Cell插件完成打印输出,两者之间通过Sun公司的一套接口API互相通信。

一、Java AppletOcx控件的交互

1.1Java Applet访问Java Script方法和Ocx控件

Sun公司在JDK中提供了一套从Java Applet访问Java ScriptAPI,由此可以实现Java Applet访问HTML页面中的DOM对象的机制。该API以一个Jar文件的形式提供:%JAVA_HOME%/jre/lib/jaws.jar,其中%JAVA_HOME%是你安装JDK的目录。将该jar文件加入到环境变量classpath中,就可以用它实现从Java AppletJava 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.2JavaScript访问Java Applet

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

(1) 在载入Java PluginObject标签中,用参数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"

onClick="calculate" language="JavaScript">

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

<SCRIPT language="JavaScript">

       function calculate() {

                      document.. MyPlunin.method1()

       }

</SCRIPT>

二、Cell插件简介

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

三、系统实现

1.1 系统架构

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

 

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

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

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

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

1.2.1HTML页面上嵌入华表的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插件的目的。

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

其中SetCellStringCell插件提供的接口方法。这样就实现了从Java Applet到华表的Cell插件的调用。

五、结论

在这个应用系统中,我们只利用Cell插件的打印预览和打印两项功能,不用它做屏幕显示。所有打印格式和数据都在Java Applet中准备好,按单元格向Cell插件设置格式和数据,由Cell插件完成分页和打印功能。

这是一种表现与数据分离的方式:Java Applet中只组织打印数据,所有打印的表现工作交给Cell插件完成,因此能够大大降低工作量。

Cell插件除打印功能外,还具有输入、显示、编辑、图表等非常强大的功能,可以制作出非常复杂的报表。利用Cell插件,还可以将数据导出为ExcelPDF等格式的文件。

六、参考文献

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

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

 

 

赵继江

 20031

在JSP中使用CELL插件

       最近项目中要在JSP页面中使用用友华表的CELL插件制作报表,开发中发现几个需要注意的地方,在此记录一下,也与大家分享一下。1、在调试中,JSP页面中无法显示CELL插件的原因,JSP页...
  • qdzx2008
  • qdzx2008
  • 2007年08月16日 17:08
  • 4524

CELL插件

  • 2006年05月24日 00:00
  • 0B
  • 下载

Cell插件在J2EE系统中的应用

Cell插件在J2EE系统中的应用  [摘要] 在基于J2EE平台的信息系统中,具有丰富表现能力的Java Applet是界面层的一种重要形式。但Java API对打印的支持比较弱,打印输出复杂的单据...
  • gigix
  • gigix
  • 2003年03月14日 13:50
  • 2596

基于j2ee的web应用

本文已经在《微型机与应用》发表,并被万方等多个数据库录用。  基于j2ee技术的Web应用倪礼豪(*****************************,浙江**)摘要  J2EE和DotNet框...
  • nilihao
  • nilihao
  • 2007年08月29日 16:10
  • 2590

J2EE系统优化的几点体会(二、循环)

showbanner(6,6,1);google_ad_client ="pub-2141342037947367";google_ad_width = 120;google_ad_height =2...
  • herrapfel
  • herrapfel
  • 2005年06月15日 09:11
  • 1175

用友华表CELL插件Demo

  • 2009年06月12日 09:32
  • 30KB
  • 下载

华表cell组件帮助手册

  • 2013年09月17日 18:27
  • 1.19MB
  • 下载

软件体系架构模式在J2EE中的应用

本文介绍了软件体系架构模式的层模式,分析了它的结构,特点,实现,以及优缺点等. 然后介绍遵循层模式的Architectural cube理论,结合J2EE的体系架构特点,剖析层模式是怎样应用的.最后以...
  • kjndppl
  • kjndppl
  • 2008年01月08日 08:59
  • 446

【J2EE】企业级项目开发总结--JMS基础篇

前面回顾到EJB,说了SessionBean和EntityBean还没提到MessageDrivenBean,我们先了解JMS以后再来谈MessageDrivenBean.下面来看学习和使用JMS必须...
  • zhuanzhe117
  • zhuanzhe117
  • 2015年09月23日 11:16
  • 1997

Eclipse下写jsp的插件下载地址

http://www.objectlearn.com/index.jsp 慢得要死 找Eclipse2.12的中文包没有找到!算了学E文!...
  • moeryang
  • moeryang
  • 2004年06月30日 22:49
  • 1687
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Cell插件在J2EE系统中的应用
举报原因:
原因补充:

(最多只允许输入30个字)