方槍槍的java世界

          不要因?yàn)轱L(fēng)雨飄落就停止了你的腳步,真正的得失就在你的心中。 做喜歡做的事,不輕言放棄!

          關(guān)于ActiveX控件的使用

          1 需求背景

          我們?cè)谄髽I(yè)應(yīng)用開發(fā)中經(jīng)常會(huì)用到ActiveX控件,如:華表打印控件、密碼小鍵盤控件、寫卡器控件、讀取客戶端IPMAC信息的控件、二代身份證讀取控件。

          1.1 問題現(xiàn)象

          這些控件在代碼中的調(diào)用方式不夠標(biāo)準(zhǔn),五花八門,千差萬別,如:

          // 沒有版本號(hào),和本地安裝版本比對(duì)發(fā)現(xiàn)有新版本時(shí)不會(huì)提示用戶進(jìn)行升級(jí)

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

          // 如果不寫,操作員沒有安裝,會(huì)直接報(bào)錯(cuò),不會(huì)提示安裝

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

          // 沒有版本號(hào)

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

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

          1.2 問題總結(jié)

          由上面代碼可以看出,上面的代碼有的指定了codebase,有的沒有指定codebase對(duì)于沒有指定codebase的情況,控件無法自動(dòng)下載安裝,用戶安裝該控件只有一種方式,那就是主動(dòng)下載控件安裝包進(jìn)行手工安裝。當(dāng)前所有的控件使用方式,都無法實(shí)現(xiàn)控件版本升級(jí)后自動(dòng)更新,只能靠通知用戶手工下載安裝包重新安裝來實(shí)現(xiàn)升級(jí)。因此,有必要對(duì)當(dāng)前系統(tǒng)中控件使用方法進(jìn)行規(guī)范,簡化調(diào)用方式,減少代碼量,同時(shí)實(shí)現(xiàn)自動(dòng)升級(jí)。

          2 解決方案(tag)

          2.1 使用tag引用ActiveX控件

          <xx:activex id='KeyCard1' code='KeyCard' style=”…..” /> // keyCard唯一標(biāo)記數(shù)據(jù)庫中一個(gè)控件

          tag從數(shù)據(jù)庫中取出該控件的相關(guān)屬性(是否顯示、classidcodebase、版本號(hào)等),然后組裝成以下格式的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文件的版本號(hào)。IE會(huì)比較HTML中的版本號(hào)和已經(jīng)安裝的控件的版本號(hào),如果瀏覽器發(fā)現(xiàn)控件的版本升級(jí)了,就會(huì)自動(dòng)去更新控件。

          后續(xù)需要發(fā)布新版本的ActiveX控件時(shí),只需要更新對(duì)應(yīng)的cab文件,并在數(shù)據(jù)庫中修改對(duì)應(yīng)的版本信息,用戶在用到該控件時(shí)瀏覽器會(huì)自動(dòng)提示下載更新。

          2.2 數(shù)據(jù)庫

          在數(shù)據(jù)庫中增加一個(gè)存放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標(biāo)簽

          編寫ActiveXBean,包含成員code,prov,style,classid,codebase及相應(yīng)的getset方法。

          在系統(tǒng)初始化時(shí),將數(shù)據(jù)庫中配置的ActiveX控件信息緩存到一個(gè)Map中,key$(code)_$(prov)value為編寫標(biāo)簽

          標(biāo)簽ActiveXTag,接收參數(shù):id(必須)、code(必須)style(可選),并根據(jù)傳入的參數(shù),生成代碼:

          其中,styleclassidcodebase是從ActiveX緩存中獲得。

          2.4 JSP代碼中引用

          通過<xx:activex id='KeyCard1' style=”…..” code='KeyCard'/>方式進(jìn)行引用,對(duì)于不在頁面上顯示的控件,style也可以不用,只要在數(shù)據(jù)庫中配置好即可。

          posted on 2012-12-25 22:58 做強(qiáng)大的自己 閱讀(2869) 評(píng)論(0)  編輯  收藏 所屬分類: Jsp


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 荥经县| 密山市| 唐海县| 大兴区| 大英县| 西盟| 犍为县| 荔波县| 忻州市| 夏津县| 台山市| 大新县| 嵩明县| 德格县| 克拉玛依市| 德兴市| 朝阳县| 阿图什市| 海门市| 绥芬河市| 库伦旗| 万源市| 沾化县| 彰化县| 安岳县| 克山县| 江城| 青浦区| 福泉市| 徐水县| 苍梧县| 闻喜县| 恩施市| 灵寿县| 奉化市| 绥宁县| 永顺县| 石渠县| 始兴县| 平果县| 武宣县|