服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

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指定一个名字:
  
    classid="clsid:8ad9c840-044e-11d1-b3e9-00805f499d93">
  
  ...
  

  (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 系统架构
   cell插件在j2ee系统中的应用(图一)
  图一是系统的配置示意图。由图可见,这是一个典型的三层应用系统。在本系统中,java applet和cell插件部署在web server上,在运行时,它们被下载到客户端,运行在浏览器中。
  
  图二是系统的运行示意图。由图可见,运行在客户机上的java applet通过web server上的servlet访问应用服务器上的ejb,与后台交互。java applet作为表示层,在客户机上显示界面。
  
  当需要打印输出时,java applet将数据和显示格式设置到华表插件中,并调用华表插件的打印与览和打印方法,完成打印功能。
  cell插件在j2ee系统中的应用(图二)
  1.2 用cell插件实现java界面的打印
  
  1.2.1在html页面上嵌入华表的cell插件
  
  为了在applet界面中调用华表的cell插件,我们首先在html页面上隐藏了一个cell插件:
  
    
  id=dcellweb1  style="height: 0px; width: 0px">
  
  
  
  
  
  
  
  
  
  

  
  通过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/

扫描关注微信公众号