方枪枪的java世界

不要因为风雨飘落就停止了你的脚步,真正的得失就在你的心中。 做喜欢做的事,不轻言放弃!

关于ActiveX控件的使用

1 需求背景

我们在企业应用开发中经常会用到ActiveX控件,如:华表打印控件、密码小键盘控件、写卡器控件、读取客户端IPMAC信息的控件、二代身份证读取控件。

1.1 问题现象

这些控件在代码中的调用方式不够标准,五花八门,千差万别,如:

// 没有版本号,和本地安装版本比对发现有新版本时不会提示用户进行升级

<object classid="clsid:80B7C135-4C0B-48DE-BA77-0E353012C169" id="TcpCfg"

 codebase="<%=request.getContextPath()%>/data/gettcpcfg.ocx">

</object>

// Jsp所在路径才行,否则找不到

<object id="ThirdParty" name="ThirdParty" classid="clsid:DAD0331B-6F7E-4CFB-89BF-1DE86A0AC626"

codebase="ThirdParty.ocx" width="10" height="10">

</object>

<object classid="clsid:14B8260F-CBF7-41C0-B52B-062F712ACBF1" id="CRSClientHUB" height="0" width="0" ></object>

// 如果不写,操作员没有安装,会直接报错,不会提示安装

<object classid="CLSID:636BCD61-4473-4FF5-A4C6-6E030C31EBD4" id="BossICCardOCX"></object>

// 没有版本号

<object classid="clsid:3FA32835-2A6A-45E9-B6E9-B00A779A60F3" id="MINIPRINT" name="miniCell"

width="0" height="0" codebase="<%=miniPath%>"></object>

1.2 问题总结

由上面代码可以看出,上面的代码有的指定了codebase,有的没有指定codebase对于没有指定codebase的情况,控件无法自动下载安装,用户安装该控件只有一种方式,那就是主动下载控件安装包进行手工安装。当前所有的控件使用方式,都无法实现控件版本升级后自动更新,只能靠通知用户手工下载安装包重新安装来实现升级。因此,有必要对当前系统中控件使用方法进行规范,简化调用方式,减少代码量,同时实现自动升级。

2 解决方案(tag)

2.1 使用tag引用ActiveX控件

<xx:activex id='KeyCard1' code='KeyCard' style=”…..” /> // keyCard唯一标记数据库中一个控件

tag从数据库中取出该控件的相关属性(是否显示、classidcodebase、版本号等),然后组装成以下格式的HTML

<object id="KeyCard1" style="display:none" classid="clsid:ACFC1E38-2FA5-4D00-BA69-0EFB62BC96C6" codebase="/data/KeyCard.cab#version=1,0,0,0">

</object>

其中Codebase部分包括.ocx文件的版本号。IE会比较HTML中的版本号和已经安装的控件的版本号,如果浏览器发现控件的版本升级了,就会自动去更新控件。

后续需要发布新版本的ActiveX控件时,只需要更新对应的cab文件,并在数据库中修改对应的版本信息,用户在用到该控件时浏览器会自动提示下载更新。

2.2 数据库

在数据库中增加一个存放ActiveX信息的字典表SA_DB_ACTIVEX,格式如下:

字段名称

字段说明

字段类型

备注

CODE

ActiveX控件编码

VARCHAR2(32)

Tag中引用

CLASSID

ActiveX Classid

VARCHAR2(64)

如:clsid:ACFC1E38-2FA5-4D00-BA69-0EFB62BC96C6

STYLE

ActiveX显示属性

VARCHAR2(256)

如:display:none

CODEBASE

ActiveX安装包及版本

VARCHAR2(256)

:/data/KeyCard.cab#version=1,0,0,0

DESCRIPTION

ActiveX描述

VARCHAR2(256)

 

 

2.3 编写tag标签

编写ActiveXBean,包含成员code,prov,style,classid,codebase及相应的getset方法。

在系统初始化时,将数据库中配置的ActiveX控件信息缓存到一个Map中,key$(code)_$(prov)value为编写标签

标签ActiveXTag,接收参数:id(必须)、code(必须)style(可选),并根据传入的参数,生成代码:

其中,styleclassidcodebase是从ActiveX缓存中获得。

2.4 JSP代码中引用

通过<xx:activex id='KeyCard1' style=”…..” code='KeyCard'/>方式进行引用,对于不在页面上显示的控件,style也可以不用,只要在数据库中配置好即可。

posted on 2012-12-25 22:58 做强大的自己 阅读(2846) 评论(0)  编辑  收藏 所属分类: Jsp


只有注册用户登录后才能发表评论。


网站导航: