方槍槍的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 做強大的自己 閱讀(2869) 評論(0)  編輯  收藏 所屬分類: Jsp


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 碌曲县| 巴林左旗| 盘锦市| 通河县| 枣庄市| 西和县| 甘南县| 中方县| 叙永县| 琼结县| 万全县| 乾安县| 岢岚县| 株洲县| 咸丰县| 丘北县| 洪江市| 鄄城县| 南雄市| 长宁区| 青海省| 当雄县| 巨野县| 青铜峡市| 龙胜| 汉川市| 邢台县| 曲靖市| 淳安县| 石棉县| 依安县| 荣成市| 甘肃省| 沙河市| 东台市| 政和县| 井研县| 务川| 馆陶县| 盘锦市| 娱乐|