AppFrame基礎(chǔ)培訓(xùn)教材-課件_第1頁
AppFrame基礎(chǔ)培訓(xùn)教材-課件_第2頁
AppFrame基礎(chǔ)培訓(xùn)教材-課件_第3頁
AppFrame基礎(chǔ)培訓(xùn)教材-課件_第4頁
AppFrame基礎(chǔ)培訓(xùn)教材-課件_第5頁
已閱讀5頁,還剩185頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

亞信基礎(chǔ)開發(fā)平臺AppFrame培訓(xùn)姓名培訓(xùn)目標(biāo)了解AppFrame的功能快速掌握使用AppFrame平臺的基本技能培訓(xùn)內(nèi)容AppFrame簡介平臺發(fā)展過程和應(yīng)用平臺體系結(jié)構(gòu)AppFrame主體功能介紹安裝配置開發(fā)流程簡介配置工具的使用頁面組件及使用介紹

AIWebFrame登陸框架AppFrame對OBD的支持控制臺管理AppFrame簡介AppFrame目標(biāo)為什么要開發(fā)AppFrame?J2EE是一套比較新的技術(shù),相比原來的C/S結(jié)構(gòu)系統(tǒng)或三(多)層結(jié)構(gòu)系統(tǒng),在設(shè)計、開發(fā)、部署方面增加了很多新的特點,相對來說變的比較復(fù)雜,因此AppFrame著重解決以下問題:解決性能問題統(tǒng)一設(shè)計模式提高開發(fā)效率提供標(biāo)準(zhǔn)組件,降低編碼強(qiáng)度提供穩(wěn)定的可擴(kuò)展框架AppFrame與J2EE的關(guān)系J2EE是一套標(biāo)準(zhǔn),是分布式應(yīng)用程序的運行環(huán)境和一套可擴(kuò)展的javaAPIAppFrame是一個框架,是一個在J2EE標(biāo)準(zhǔn)下開發(fā)企業(yè)應(yīng)用的平臺,包括API、工具、設(shè)計模式AppFrame的實現(xiàn)采用J2EE標(biāo)準(zhǔn)技術(shù)平臺發(fā)展過程和應(yīng)用AppFrame版本演進(jìn)(1)Appframe1.0前臺界面展現(xiàn)完全采用DHTML和JavaScript實現(xiàn),采用XMLHTTP控件與服務(wù)進(jìn)行數(shù)據(jù)交換。所有數(shù)據(jù)和控制信息采用XML文檔進(jìn)行傳遞。優(yōu)點:界面層與數(shù)據(jù)層完全分離,功能強(qiáng)大。缺點:所有的界面生成和控制都在IE中完成,導(dǎo)致系統(tǒng)運行效率較低。相關(guān)項目:浙江網(wǎng)通業(yè)務(wù)支撐系統(tǒng)AppFrame版本演進(jìn)(2)Appframe2.0采用Tag與DHTML、JavaScript相結(jié)合來改善系統(tǒng)性能,同時保留1.0中靈活適用的功能。優(yōu)點:解決了1.0中存在的性能問題,同時在使用的方便性方面得到了較大的改善。相關(guān)項目:重慶網(wǎng)通業(yè)務(wù)支撐系統(tǒng)、海南網(wǎng)通業(yè)務(wù)支撐系統(tǒng)、上海網(wǎng)通業(yè)務(wù)支撐系統(tǒng)、浙江網(wǎng)上營業(yè)廳系統(tǒng)衍生版本:AppframeForCorba(上海移動門戶系統(tǒng))

AppframeForOBD(浙江移動渠道管理系統(tǒng)、移動客服系統(tǒng)。。。)AppFrame版本演進(jìn)(3)Appframe3.0合并Appframe2.0、AppframeForCorba、AppframeForOBD的版本;增加系統(tǒng)運行期監(jiān)控功能;增加套打組件、數(shù)據(jù)報表組件等;加強(qiáng)安全性控制;AppFrame版本演進(jìn)(4)Appframe3.1、Appframe3.2、Appframe3.3在Appframe3.0版本的基礎(chǔ)上又相繼發(fā)布3.1、3.2、3.3版本,其主要目的是為了滿足各個項目實際使用中的需求,而整合了一些新功能或者是修正了一些問題,或者是在性能上進(jìn)行了調(diào)整。AppFrame版本演進(jìn)(5)而AppFrame5.0版本在結(jié)構(gòu)作出了重大的調(diào)整,以下幾點總結(jié)了該版本對于系統(tǒng)開發(fā)所帶來的好處:提供符合SOA體系結(jié)構(gòu)、組件化的開發(fā)框架,降低業(yè)務(wù)系統(tǒng)耦合性提供穩(wěn)定易擴(kuò)展的基礎(chǔ)組件,提升系統(tǒng)開發(fā)效率和穩(wěn)定性提供系統(tǒng)全方位的跟蹤監(jiān)控機(jī)制,提升系統(tǒng)問題的快速定位能力提供與權(quán)限系統(tǒng)的無縫連接使業(yè)務(wù)系統(tǒng)的構(gòu)建是一個自頂而下的可持續(xù)改善的過程提供統(tǒng)一的開發(fā)模式,使開發(fā)維護(hù)易于管控提供開發(fā)與部署無關(guān)的機(jī)制,降低開發(fā)復(fù)雜度,提升系統(tǒng)部署靈活性使企業(yè)的軟件資產(chǎn)具有繼承性和可管理性AppFrame版本演進(jìn)(6)AppFrame5.5版本AppFrame5.5版本對平臺的標(biāo)準(zhǔn)版本和河南版本做了融合,其目的在于整合兩個版本的優(yōu)秀元素,將這兩個版本好的特性集成到一個版本中,將其高配置性、高效率性、高穩(wěn)定性和高性能的特質(zhì)帶入到新版本中,提供一個更加完善的平臺技術(shù)框架。AppFrame河南版本經(jīng)過河南移動BOSS3.0項目的淬煉,已經(jīng)被證實它的高穩(wěn)定性和高性能,能夠很好的支撐5千萬的用戶量,所以這次融合將平臺河南版本的底層實現(xiàn)引入,以后續(xù)更好的支撐大型業(yè)務(wù)應(yīng)用系統(tǒng)。平臺體系結(jié)構(gòu)術(shù)語定義(一)Session:存儲特定用戶會話所需的信息,當(dāng)用戶在應(yīng)用程序的Web頁之間跳轉(zhuǎn)時,存儲在Session對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。O/Rmapping(ObjectRelationalMapping):java對象和數(shù)據(jù)庫對象之間的映射,通過O/Rmapping實現(xiàn)java對象對數(shù)據(jù)庫的透明訪問。XML文檔:符合xml規(guī)范的文本,在APPFrameV3.0中,xml文檔通常用于數(shù)據(jù)交互。DataModel:數(shù)據(jù)模型,即J2EE設(shè)計模式M-V-C中的M,又稱model。RowSet:結(jié)果集,由此派生出FormRowSet、TableRowSet等。NormalRowSet:通用結(jié)果集,是不可視的結(jié)果集,有它自己的js的構(gòu)造方式術(shù)語定義(二)BO(businessobject):BO定義了業(yè)務(wù)對象數(shù)據(jù)的來源、數(shù)據(jù)屬性以及業(yè)務(wù)對象的操作與關(guān)聯(lián)。BO通過configtools配置工具配置生成,包含一個.bo文件和3個自動生成的.java文件,3個文件分別是xxBean.java、xxEngine.java、IxxValue.java。SET:configtools配置生成一個.set文件,定義了web頁面的數(shù)據(jù)來源、展示的格式。DS數(shù)據(jù)源(datasource):ds定義了頁面顯示的下拉列表數(shù)據(jù)源,具體表現(xiàn)為使用configtools配置生成一個.ds文件。DataContainer:數(shù)據(jù)容器,APPFrameV5.0中傳遞和處理數(shù)據(jù)的基本類。AppFrame在系統(tǒng)中的位置流程配置J2EESERVERAppframeAPPDM數(shù)據(jù)模型業(yè)務(wù)規(guī)則、服務(wù)定義BCE權(quán)限管理(SecFrame)界面風(fēng)格配置產(chǎn)品數(shù)據(jù)定義業(yè)務(wù)處理邏輯系統(tǒng)系統(tǒng)部署要求PCEUWFE內(nèi)網(wǎng)系統(tǒng)門戶系統(tǒng)客戶經(jīng)理公眾客戶系統(tǒng)總體構(gòu)架SecFrame權(quán)限管理AppMoitor應(yīng)用管控SOA體系架構(gòu)DB數(shù)據(jù)庫、CORBA、EJB等DAO1DAO2DAO3服務(wù)1服務(wù)2服務(wù)3邏輯層(JService)數(shù)據(jù)操縱層(JService)數(shù)據(jù)層Action類Action類服務(wù)1Action類UI層邏輯功能功能點1JSP頁面1JSP頁面2JSP頁面3功能點2外部服務(wù)1外部服務(wù)2外部服務(wù)3系統(tǒng)各層間全部通過服務(wù)進(jìn)行調(diào)用服務(wù)之間的依賴通過依賴注入的模式來實現(xiàn)。服務(wù)的部署方式包括:POJO、EJB、WEBSERVICE、CORBA服務(wù)的部署方式與調(diào)用者和實現(xiàn)者都無關(guān)提升開發(fā)效率Web端提供了穩(wěn)定的UI組件和前后臺的數(shù)據(jù)交付方式,提高前臺web開發(fā)效率DBGrid、DBForm、DBTree、AITab等自動實現(xiàn)前臺數(shù)據(jù)展現(xiàn)和后臺業(yè)務(wù)數(shù)據(jù)對象的自動轉(zhuǎn)換增強(qiáng)的JSP編輯器和項目自定義模板加快jsp的開發(fā)效率通過服務(wù)注冊管理機(jī)制和AppframeDeploy可以屏蔽系統(tǒng)部署對開發(fā)的影響系統(tǒng)的最后部署模式與開發(fā)無關(guān),降低了開發(fā)人員的技能要求提高了系統(tǒng)開發(fā)調(diào)試的速度事務(wù)控制的配置化管理從原來的業(yè)務(wù)邏輯中抽離了事務(wù)控制,簡化了系統(tǒng)邏輯。減少了代碼層次和代碼量。提高了系統(tǒng)開發(fā)調(diào)試的速度業(yè)務(wù)過程實現(xiàn)了詳細(xì)設(shè)計與開發(fā)的同步,避免設(shè)計和開發(fā)的脫節(jié),提高了開發(fā)效率OPFrame實現(xiàn)了O-RMapping,通過配置實現(xiàn)了數(shù)據(jù)存儲的自動化,提高了系統(tǒng)開發(fā)效率數(shù)據(jù)持久化層管理結(jié)構(gòu)數(shù)據(jù)庫連接池管理(監(jiān)控連接的申請和關(guān)閉)自定義數(shù)據(jù)庫連接池JNDI數(shù)據(jù)庫連接池ConfigTool進(jìn)行BO對象定義,并自動產(chǎn)生相關(guān)對象文件BO對象定義信息數(shù)據(jù)持久化管理數(shù)據(jù)庫CORBAOBD數(shù)據(jù)對象業(yè)務(wù)邏輯層界面控制層結(jié)構(gòu)ConfigTool進(jìn)行SET、DS對象定義SET對象定義信息,DS對象定義信息界面展現(xiàn)控制層HTML輸出TAG對象JSP文件業(yè)務(wù)邏輯層局部HTML輸出(XmlHttp)用戶操作Action請求AppFrame主體功能介紹數(shù)據(jù)持久層管理

數(shù)據(jù)持久化就是通過序列化或者保存到數(shù)據(jù)庫的方式保存對象的狀態(tài)和數(shù)據(jù)。

BO對象**Bean.java(數(shù)據(jù)包裝類):是DataContainer類的子類,封裝了表的每個記錄行,并提供get/set方法。**Engine.java(基本操作引擎類):包含getSysTime、getNewId、getCount、getBeans、save等基本方法.I**Value.java(業(yè)務(wù)接口類):接口類,在使用配置工具時可選擇是否生成。若生成,**Bean則需要implements這個接口業(yè)務(wù)邏輯層數(shù)據(jù)枚舉服務(wù):static/sql/BO/function/service5種類型對象唯一標(biāo)識IDgenerator數(shù)據(jù)源管理DBDataSourceSelfJNDI對象存儲管理DataStoreSessionManager和ServiceManager數(shù)據(jù)對象容器DataContainer日志處理:log4j界面管理層功能可視化的界面元素定義數(shù)據(jù)類型:數(shù)據(jù)長度,校驗方式展現(xiàn)方式:DBEdit、DBListBox、DBLabel、DBChecbox、DBDate…

數(shù)據(jù)選擇來源:下拉數(shù)據(jù)源選擇、動態(tài)關(guān)聯(lián)參數(shù)設(shè)置…

編輯狀態(tài):是否可編輯根據(jù)定義自動生成前臺需要的數(shù)據(jù)集

TableRowSetFormRowSetNormalRowSet自動將前臺返回的數(shù)據(jù)轉(zhuǎn)換為標(biāo)準(zhǔn)的數(shù)據(jù)對象Bean

將一個前臺數(shù)據(jù)集自動拆分為多個后臺數(shù)據(jù)對象數(shù)組界面對象元素DBFormDBGridDBTreePopMenuDBListBoxTab

日歷控件

……安裝配置環(huán)境要求JDK1.4或以上版本,確認(rèn)已經(jīng)被加入到本機(jī)環(huán)境變量classpath開發(fā)IDE:Jbuilderx+tomcat4.1瀏覽器IE6.0或以上版本W(wǎng)ebServer/AppServer:如果程序需要發(fā)布到weblogic,需要weblogic7.0以上版本,如果發(fā)布到webSphere,需要webSphere5.0以上版本;開發(fā)階段使用JBuilderx自帶的tomcat4.1數(shù)據(jù)庫oracle8.1.2以上版本,相應(yīng)的jdbc版本。創(chuàng)建APPFrameV5.0必須的數(shù)據(jù)庫表sys_id_generator

工程配置(一)

通常,基于APPFrameV5.0開發(fā)一個工程,第一級目錄結(jié)構(gòu)為:src:存放java源碼及配置工具configtools自動生成的java源碼及set、ds、view、bo等配置工具生成的文件html:webmodel目錄,也可以為webmodel取另外一個名字,在這個目錄下存放頁面文件html、jsp、js等源碼lib:類庫,appframe.jar及其他第三方j(luò)ar包

*注意:ConfigTool所在的目錄在路徑中不能含有中文,因為ConfigTool在加載的時候需要讀取jsptemplate模版,而這個模版現(xiàn)在還不支持中文工程配置(二)

配置文件AIConfig.xml的說明文件中定義了APPFrameV5.0框架中各個模塊的管理器;還有CrossGrid,DBTreeNew的相關(guān)配置信息

AIConfig.xml文件要求能通過ClassPath搜索獲得。如果APPFrameV5.0框架中沒有或缺少某一個模塊的實現(xiàn)包,需要在此配置文件中注釋掉對應(yīng)的數(shù)據(jù)行。

例如:

<ConfigKindname="AppFrameInit"><ConfigItemname="DbDataSourceIniFile"remarks="數(shù)據(jù)庫連接配置文件">aisystem.ini</ConfigItem><ConfigItemname="DefaultSrouceName"remarks="缺省數(shù)據(jù)源名稱">UserDataSource</ConfigItem>……開發(fā)流程簡介開發(fā)流程簡介第一步:界面開發(fā)

界面主要是jsp、html以及js文件,開發(fā)分為兩步:使用configtool完成bo、set、ds配置及生成相關(guān)java文件按照jsp的語法規(guī)范,完成jsp的編寫

注意:在編寫jsp代碼的時候,別忘了包含對APPFrame提供的js文件、css文件的引用如果只是數(shù)據(jù)查詢而且是使用缺省DataModel(缺省DataModel是APPFrame提供的數(shù)據(jù)集獲取方法,與此對應(yīng)的還有自定義model),只要上面的工作就可以,如果應(yīng)用涉及對數(shù)據(jù)庫的新增、修改、刪除操作,就需要進(jìn)入第二步:界面控制

第二步:界面控制界面控制層需要寫一個servlet,這個servlet必須繼承BaseAction類。這個servlet做業(yè)務(wù)邏輯的判斷,決定調(diào)用哪個javaclass或者EJB進(jìn)行業(yè)務(wù)邏輯處理。APPFrame提供了數(shù)據(jù)保存的一個缺省實現(xiàn)com.ai.appframe2.web.defaultAction來實現(xiàn)新增、修改、刪除操作的保存。在頁面開發(fā)時指定這個類的方法作為保存方法就可以。前提是要保存的數(shù)據(jù)對應(yīng)著一個或幾個表BO,這幾個表BO之間沒有關(guān)聯(lián)關(guān)系。對一些邏輯關(guān)系復(fù)雜的表BO,還是需要自己寫servlet。第三步:持久層開發(fā)

使用配置工具configtool完成BO的配置,自動生成BO相應(yīng)的java文件

第四步:業(yè)務(wù)邏輯開發(fā)進(jìn)行業(yè)務(wù)邏輯開發(fā),也就是寫javaclass或者EJB的過程,在此過程中,需要使用配置工具自動生成的java文件。在配置工具生成的3個java文件中,使用xxEngine.java的save()方法來實現(xiàn)保存。同時這個類還提供getNewID()、getSysTime()、getBeans()等常用方法。第五步:聯(lián)調(diào)程序完成第一到第四步就可以進(jìn)行最后的調(diào)試配置工具的使用配置工具Configtool

Configtool作為APPFrame開發(fā)平臺的不可或缺的重要部分,主要提供以下功能:

數(shù)據(jù)源管理-連接數(shù)據(jù)庫的方式BO配置-BO對象,來自表、視圖、sqlSet配置-頁面數(shù)據(jù)的格式、來源DS配置-下拉框的數(shù)據(jù)來源代碼自動生成-根據(jù)BO生成的java文件

OBD接口文件轉(zhuǎn)換到BO文件(開發(fā)OBD環(huán)境的應(yīng)用時使用)JSP代碼的快速編輯

數(shù)據(jù)源管理(1)

數(shù)據(jù)源管理提供新增、修改、刪除數(shù)據(jù)源的功能。界面如下所示:數(shù)據(jù)源管理(2)數(shù)據(jù)源名稱:數(shù)據(jù)源唯一標(biāo)識數(shù)據(jù)源類型:有兩種,SELF和JNDISELF——用標(biāo)準(zhǔn)的JDBC連接數(shù)據(jù)庫JNDI——通過應(yīng)用服務(wù)器的connectionpool來連接數(shù)據(jù)庫注意:系統(tǒng)默認(rèn)數(shù)據(jù)源命名為“UserDataSource”通過配置工具生成的數(shù)據(jù)源定義文件在工程目錄config下aisystem.xml中,其中psd密碼是經(jīng)過加密的BO(業(yè)務(wù)對象)管理(1)BO的創(chuàng)建根據(jù)數(shù)據(jù)庫表結(jié)構(gòu)生成BO

根據(jù)sql查詢生成BO

根據(jù)OBD接口文件生成BOBO多表關(guān)聯(lián)BO(業(yè)務(wù)對象)管理(2)新建BO界面如下:BO(業(yè)務(wù)對象)管理(3)配置BO屬性如下所示:SET(界面數(shù)據(jù))配置管理(1)可視化的界面元素定義數(shù)據(jù)類型:數(shù)據(jù)長度,校驗方式展現(xiàn)方式:DBEdit、DBListBox、DBLabel、DBChecbox、DBDate…數(shù)據(jù)選擇來源:下拉數(shù)據(jù)源選擇、動態(tài)關(guān)聯(lián)參數(shù)設(shè)置…編輯狀態(tài):是否可編輯根據(jù)定義自動生成前臺需要的數(shù)據(jù)集TableRowSetFormRowSetNormalRowSet自動將前臺返回的數(shù)據(jù)轉(zhuǎn)換為標(biāo)準(zhǔn)的數(shù)據(jù)對象Bean可以將一個前臺數(shù)據(jù)集自動拆分為多個后臺數(shù)據(jù)對象數(shù)組SET(界面數(shù)據(jù))配置管理(2)支持的前臺校驗數(shù)據(jù)類型StringDateDateTimeFloatIntegerEmailPostcode支持項目進(jìn)行數(shù)據(jù)類型的定義擴(kuò)展例如:地址、客戶經(jīng)理、組織SET(界面數(shù)據(jù))配置管理(3)新增SET,需要選擇BO來生成,界面如下:SET(界面數(shù)據(jù))配置管理(4)修改Field的屬性SET(界面數(shù)據(jù))配置管理(5)高級設(shè)置——設(shè)置在頁面顯示的一些“是否可視、順序”等屬性。

DS(數(shù)據(jù)枚舉)配置管理(1)

頁面數(shù)據(jù)源是為界面的DBListBox下拉列表框提供數(shù)據(jù),DS支持5類數(shù)據(jù)來源:靜態(tài)數(shù)據(jù):直接在DS配置中定義顯示的數(shù)據(jù)BO數(shù)據(jù):通過BO結(jié)合條件來查詢數(shù)據(jù)SQL數(shù)據(jù):通過自定義的SQL語句查詢數(shù)據(jù)Function數(shù)據(jù):通過自己寫java方法查詢數(shù)據(jù)作為數(shù)據(jù)源Service數(shù)據(jù):通過指定服務(wù)ID和實現(xiàn)服務(wù)接口作為數(shù)據(jù)源DS(數(shù)據(jù)枚舉)配置管理(2)新建DS文件后,配置界面如下:JSP頁面輔助編輯器(1)JSP頁面輔助編輯器(2)使用模板快捷的創(chuàng)建新JSP文件方便快捷的TAG類屬性編輯對特殊的數(shù)據(jù)控件(Grid,Form)進(jìn)行方便的排版編輯方便的JavaScript編輯定位和查找提供清晰的頁面布局分區(qū)頁面組件及使用介紹前臺界面控件DBGridDBFormDBTreePopMenuDBListBoxDBTab……DBGridDBGrid是一個非常有用的頁面組件,以表格方式展現(xiàn)數(shù)據(jù),主要用來展示查詢的數(shù)據(jù)結(jié)果,或者進(jìn)行簡單的數(shù)據(jù)維護(hù)。一個DBGrid的樣式如下:DBGrid實現(xiàn)原理DBGrid是一個表單組件,根據(jù)需要通過GridDataModelInterface(表格數(shù)據(jù)模型)接口的實現(xiàn)類得到結(jié)果集,將結(jié)果集以DBGrid的形式進(jìn)行顯示。使用時需要在jsp文件中使用tag標(biāo)簽定義表格的顯示方式。結(jié)果集生成方式:平臺提供默認(rèn)的DefaultDataModel用來生成結(jié)果集通過使用ActionDataModel,指定具體的類和方法來生成結(jié)果集。通過自定義DBGridDataModelInteface接口的實現(xiàn)類來構(gòu)造自定義的GridDataModel。通過使用MethodModelForService或者QueryModelForService,以服務(wù)的方式生成結(jié)果集(推薦使用)通過DBGrid組件展現(xiàn)數(shù)據(jù)時,需要通過configtools配置生成的頁面數(shù)據(jù)源set。DBGrid接口說明(1)Table標(biāo)簽選項

通常,在一個jsp文件中,table標(biāo)簽使用方法如下:<%@tagliburi="/WEB-INF/APPFrameV2.tld"prefix="ai"%><%pageContext.getRequest().setAttribute("condition","staff_id=:staff_id");//初始化條件HashMapmap=newHashMap();map.put("staff_id",newInteger(400));pageContext.getRequest().setAttribute("parameters",map);%><ai:table

tableid="staff"setname="test.guanwb.staff"height="200"multiselect="true"needrefresh="true" editable="true"oncontextmenu=""ondbclick=""pagesize="20"conditionname="condition"onvalchange="valchange"oncellchange="" width="600"onrowchange=""parametersname="parameters"tablemodel=""initial=”true”><ai:colfieldname=”organize_id”width=”20’editable=”false’visible=”false”/></ai:table>DBGrid接口說明(2)

js對象TabelRowSet支持的事件OnRowFocusChange:行焦點改變事件OnCellFocusChange:單元格焦點改變事件OnValueChange:單元格值改變事件OnGridDbClick:雙擊事件,當(dāng)DBGrid標(biāo)簽的editable設(shè)置為true時,不響應(yīng)此事件。OnContextMenu:鼠標(biāo)右鍵事件OnBeforeTurnPage:翻頁前觸發(fā)事件OnAfterTurnPage:翻頁后觸發(fā)事件OnRowSelected:行選中觸發(fā)事件DBGrid接口說明(3)

js對象g_TableRowSetManagerg_TableRowSetManager對象是APPFrameV3.0內(nèi)建的表格數(shù)據(jù)集管理器,對頁面內(nèi)的所有表格對象進(jìn)行管理。g_TableRowSetManager在頁面加載時自動構(gòu)建。方法說明:Get(pk):參數(shù)pk為DBGrid唯一標(biāo)識tableID,通過該方法獲得DBGrid表格數(shù)據(jù)集的引用。Push(SetName):參數(shù)SetName為頁面數(shù)據(jù)源set名稱,該方法向管理器中增加一個表格數(shù)據(jù)集。Remove(pk):刪除一個表格數(shù)據(jù)集對象。使用范例:

varstaff_grid=g_TableRowSetManager.get(“staff”);varcurRow=staff_grid.getRow();

DBGrid接口說明(4)js對象TabelRowSet提供的方法

js文件名:jsv2/TableRowSet.js設(shè)置DBGrid組件的外觀的方法,經(jīng)常采用平臺默認(rèn)的設(shè)置,很少通過以下方法做修改。setEditSts(value):設(shè)置表格的編輯狀態(tài)setRowEditSts(rowIndex,value):根據(jù)行號設(shè)置行的可編輯屬性getRowEditSts(rowIndex):根據(jù)行號獲取行可編輯屬性setColEditSts(colIndex,value):根據(jù)列名設(shè)置列的可編輯屬性setTableBgColor(color):設(shè)置表格的背景顏色,參數(shù)color類似”#ffff0000”setCurRowBgColor(color):設(shè)置表格的當(dāng)前行背景顏色setRowBgColor(rowIndex,color)::設(shè)置指定行的背景顏色

……

DBGrid接口說明(5)以下是對DBGrid有用操作的方法,對開發(fā)人員至關(guān)重要。getRow():獲取當(dāng)前行號,返回一個整數(shù),第一行行號為0。setRow(rowIndex):設(shè)置當(dāng)前行號,rowIndex為整型。getCol():獲取當(dāng)前列號,返回整數(shù),第一列列號為1。setFocus(rowIndex,colIndex):將焦點設(shè)置到指定的單元格上setFocusByName(rowIndex,colName):將焦點設(shè)置到指定的單元格上……(具體見demo工程或操作手冊)使用范例:varstaff_grid=TableRowSetManager.get(“staff”);staff_grid.refresh(“code=”+staff_code);//查詢code為staff_code的記錄varcurRow=staff_grid.getRow();varcurCole=staff_grid.getValue(curRow,”name”);//獲取當(dāng)前行name字段的值注意事項在編寫頁面jsp文件時需要<%@includefile=“/webframe/jspcommon/includedhead.jsp”%>,APPFrameV5.0的includedhead.jsp中沒有引入相關(guān)組件的js文件,所以編寫頁面時,要使用某種組件,需引入相關(guān)的js文件,如下:

<scriptlanguage="JavaScript“src="<%=request.getContextPath()%>/jsv2/TableRowSet.js"></script>……初始化一個DBGrid時,可以通過頁面上下文pageContext設(shè)置初始化condition,condition中的參數(shù)可以是靜態(tài)的也可以是動態(tài)的。最好是初始化DBGrid為空,獲取參數(shù)后使用refresh()方法查詢數(shù)據(jù)。

如果某列沒有使用<ai:col/>標(biāo)簽定義,則TableRowSet的getValue()、getDisplayText()方法不能使用,如果需要使用但又不希望顯示這些列,可以使用<ai:col>標(biāo)簽的visible=”false”屬性。練習(xí)case1新建AppFrame工程以表organize,staff為例,用configtools配置生成下列文件以及相關(guān)java文件:

organize.bo,organize.set(其中organezetype為下拉數(shù)據(jù)源)

staff.bo,staff.set要求:頁面顯示兩個DBGrid:organize和staff,雙擊organize表格中一條記錄,顯示organize下相應(yīng)的staff記錄,可以增加、修改、刪除staff表格中記錄,(并進(jìn)行保存)。Stable為了徹底解決表格的“查詢條件過期問題”,在Appframe5.2中增加一個新的表格標(biāo)簽stable,該表格一律采用IE客戶端緩存的方式,所以不會存在“查詢條件過期”問題。該表格為原先表格的簡化版,不允許用戶自定義DataModel。用戶可以在頁面上指定需要調(diào)用的服務(wù)ID或者類名、方法名和參數(shù)來獲取表格數(shù)據(jù)。下面描述下這個表格新增的幾個字段的含義:invoke_type:從指定類獲取數(shù)據(jù)的方式,只能寫”pojo”或者”service”。”pojo”表示從指定的類獲取數(shù)據(jù);”service”表示從指定的服務(wù)獲取數(shù)據(jù)。invoke_name:表示獲取數(shù)據(jù)的類名或者服務(wù)名,這個配置項和上述的invoke_type想對應(yīng),如果invoke_type為“pojo”,那么該項表示類名,否則表示服務(wù)ID。invoke_querymethod:獲取表格數(shù)據(jù)的方法,包括方法名、參數(shù)類型和參數(shù)的名稱。例如:getGridData(inta,Stringb,longc)。invoke_countmethod:獲取表格數(shù)據(jù)的方法,具體格式同invoke_querymethod。Stable--service方式

<ai:stabletableid="xiangtao1" setname="test.stable.web.SysOrganize" invoke_type="service"initial="true" invoke_name="test.stable.service.OrganizeQuerySV" invoke_querymethod="getOrganizeInfo(Stringcondition, int$STARTROWINDEX,int$ENDROWINDEX)" needrefresh="true"footdisplay="none"> <ai:colfieldname="ORGANIZE_ID"width="150"/> <ai:colfieldname="ORGANIZE_NAME"width="150"/> </ai:stable> 紅色標(biāo)注部分是service的服務(wù)ID,根據(jù)此ID找到對應(yīng)的服務(wù)接口。Stable--pojo方式

<ai:stabletableid="xiangtao2" setname="test.stable.web.SysOrganize" invoke_type="pojo"initial="false"width="300" invoke_name="test.stable.dao.impl.OrganizeQueryDAOImpl" invoke_querymethod="getOrganizeInfo(Stringcondition,int $STARTROWINDEX,int$ENDROWINDEX)" needrefresh="true"footdisplay="none"> <ai:colfieldname="ORGANIZE_ID"width="150"/> <ai:colfieldname="ORGANIZE_NAME"width="150"/> </ai:stable> 紅色標(biāo)注的部分為具體的類,將由該類的全路徑找到對應(yīng)的類以及對應(yīng)的方法。DBFormDBForm是一個非常有用的頁面組件,主要用來以自由格式Form方式展現(xiàn)數(shù)據(jù),通常用于對一條數(shù)據(jù)的詳細(xì)信息顯示、對一條數(shù)據(jù)的新增,修改頁面中。一個DBForm的樣式如下:DBForm實現(xiàn)原理DBForm是一個表單組件,將結(jié)果集(一條結(jié)果)中的每個字段以不同的顯示類型(文本框,下拉列表框,文本域,checkbox選擇框等)進(jìn)行顯示。使用時需要在jsp文件中定義一個DBFORM的標(biāo)簽生成數(shù)據(jù)集的方式:平臺提供默認(rèn)的DefaultDataModel用來生成結(jié)果集通過自定義DBFormDataModelInteface接口的實現(xiàn)類來構(gòu)造自定義的FormDataModel通過使用ActionDataModel,指定具體的類和方法來生成結(jié)果集。通過使用MethodModelForService或者QueryModelForService,以服務(wù)的方式生成結(jié)果集(推薦使用)通過DBForm組件展現(xiàn)數(shù)據(jù)時,需要通過configtools配置生成的頁面數(shù)據(jù)源set。DBForm接口說明(1)Form標(biāo)簽選項

通常,在一個jsp文件中,form標(biāo)簽使用方法如下:<%@tagliburi="/WEB-INF/APPFrameV2.1.tld"prefix="ai"%><ai:dbformformid="form1"setname="SETTableList"conditionname="condition"parametersname="parameters"onvalchange="onValChange1"editable=”true”>TABLE_NAME<ai:dbformfieldfieldname="TABLE_name"formid="form1"visible="true"/>CH_NAME<ai:dbformfieldfieldname="CH_Name"formid="form1"width="300"visible="true"/>PARENT_ID<ai:dbformfieldfieldname="PARENT_ID"formid="form1"editable="true"visible="true"/></ai:dbform>DBForm接口說明(2)

js對象FormRowSet支持的事件onValueChange:field字段值改變事件onFoucsIn:字段獲得焦點事件onFoucsOut:字段失去焦點事件DBForm接口說明(3)js對象g_FormRowSetManagerg_FormRowSetManager對象是APPFrameV5.0內(nèi)建的DBForm數(shù)據(jù)集管理器,對頁面內(nèi)的所有DBForm對象進(jìn)行管理。g_FormRowSetManager在頁面加載時自動構(gòu)建。方法說明:Get(pk):參數(shù)pk為DBForm唯一標(biāo)識formID,通過該方法獲得DBForm數(shù)據(jù)集的引用。Push(SetName):參數(shù)SetName為頁面數(shù)據(jù)源set名稱,該方法向管理器中增加一個DBForm數(shù)據(jù)集。Remove(pk):刪除一個DBForm數(shù)據(jù)集對象。使用范例:

varstaff_form=g_FormRowSetManager.get(“staff”);varcurRow=staff_form.getValue(“NAME”);

DBForm接口說明(4)js對象FormRowSet提供的方法

js文件名:jsv2/FormRowSet.js提供對DBForm有用操作的方法,對開發(fā)人員至關(guān)重要。setEditSts(value):設(shè)置表格的編輯狀態(tài)setColEditSts(fieldName,value):根據(jù)列名設(shè)置列的可編輯性getValue(fieldName):獲取指定字段的當(dāng)前數(shù)據(jù)值,如果該字段沒有使用dbformfield標(biāo)簽顯示地定義,則getValue()無法獲取字段值。getDisplayText(fieldName):獲取指定字段的顯示值setValue(fieldName,Text,value):根據(jù)行號,列名設(shè)置數(shù)據(jù)值,value數(shù)據(jù)值text顯示值newRow():新增一空白頁,refresh(condition):FormRowSet刷新,condition條件中不能出現(xiàn)orderby條件?!?具體見demo或二次開發(fā)手冊)注意事項在編寫頁面jsp文件時需要使用Form組件,要引入相應(yīng)的js文件,例如:<scriptlanguage="JavaScript"src="/jsv2/FormRowSet.js"></script>……如果某字段沒有使用<ai:dbformfield>標(biāo)簽定義,則FormRowSet的getValue()、setValue()getDisplayText()方法不能使用,如果需要使用但又不希望顯示這些字段,可以使用<ai:dbformfield>標(biāo)簽的visible=”false”屬性。

頁面初始化后,form就有一條空記錄,不需要顯式調(diào)用newRow()來增加一條空記錄。練習(xí)case2

要求:頁面上顯示兩個form,都以staff.set為頁面數(shù)據(jù)源。第一個form:初始化為空,(數(shù)據(jù)錄入后并保存)第二個form:根據(jù)staff_code進(jìn)行查詢并顯示結(jié)果。(修改后可以保存)自定義model(1)自定義DataModel做為缺省DataModel的補(bǔ)充,提供給開發(fā)人員一種不通過缺省DataModel獲得后臺數(shù)據(jù)的方法。因此,自定義DataModel主要是為了實現(xiàn)數(shù)據(jù)查詢而使用。自定義DataModel分為兩種:

一種用于DBGrid,必須實現(xiàn)DBGridDataModelInterface;一種用于DBForm,必須實現(xiàn)DBFormDataModelInterface。

DBGrid的自定義ModelDBGrid的自定義Model:必須實現(xiàn)以下3個方法publicvoidinit(ServletRequestrequest,DBGFInterfacepInterface)throwsExceptionpublicintcount()throwsExceptionpublicObjectgetGridData(intstartRowIndex,intendRowIndex)throwsException

DBForm的自定義Model

DBForm的自定義Model:必須實現(xiàn)以下2個方法publicvoidinit(ServletRequestrequest,DBGFInterfaceInterface)throwsExceptionpublicObjectgetFormData()throwsException注意事項使用自定義model之后,<ai:table>和<ai:dbform>標(biāo)簽中的conditionname,parametersname屬性就沒用了調(diào)用refresh方法傳遞的參數(shù)必須使用“=”

,如果需要使用其他運算符,可以通過將條件做為一個字符串賦值給一個參數(shù),在后臺JAVA代碼中進(jìn)行處理。例如:

<%pageContext.getRequest().setAttribute("staff_id","<10");%>

在使用Form自定義model時,根據(jù)條件查出來的結(jié)果集必須只有一條記錄,否則后臺會拋出異常

MethodModelForService<ai:table/>標(biāo)簽中的屬性tablemodel或者<ai:dbform/>標(biāo)簽中的屬性datamodel默認(rèn)使用model:com.ai.appframe2.web.datamodel.MethodModelForService屬性implservice_name設(shè)置在服務(wù)配置文件.xml中配置的服務(wù)ID或者接口類全路徑屬性implservice_querymethod設(shè)置服務(wù)接口中的查詢方法屬性implservice_countmethod設(shè)置服務(wù)接口中的返回記錄數(shù)的方法實現(xiàn)原理:通過MethodModelForService這個定義好的model,根據(jù)implservice_name中設(shè)置的服務(wù)ID找到定義好的服務(wù),執(zhí)行implservice_querymethod中設(shè)置的方法,獲取數(shù)據(jù)集前臺刷新方法:varstationTypeRowSet=g_TableRowSetManager.get("tblStationType");varcond="domainId="+domainId+"&orgRoleTypeId="+curRoleId;stationTypeRowSet.refresh(cond);

其中implservice_querymethod中設(shè)置的方法是帶全參數(shù)的,refresh方法中的參數(shù)名完全匹配implservice_querymethod中設(shè)置的參數(shù)名QueryModelForService(1)<ai:table/>標(biāo)簽中的屬性tablemodel或者<ai:dbform/>標(biāo)簽中的屬性datamodel默認(rèn)使用model:com.ai.appframe2.web.datamodel.QueryModelForService屬性implservice_name設(shè)置在服務(wù)配置文件.service中配置的服務(wù)ID屬性implservice_querymethod設(shè)置服務(wù)接口中的查詢方法屬性implservice_countmethod設(shè)置服務(wù)接口中的返回記錄數(shù)的方法實現(xiàn)原理:通過QueryModelForService這個定義好的model,根據(jù)implservice_name中設(shè)置的服務(wù)ID找到定義好的服務(wù),執(zhí)行implservice_querymethod中設(shè)置的方法,獲取數(shù)據(jù)集前臺刷新方法: varstationTypeRowSet=g_TableRowSetManager.get("tblStationType"); varcond=“DOMAIN_ID=”+domainId+“andORG_ROLE_TYPE_ID="+curRoleId; stationTypeRowSet.refresh(cond);QueryModelForService(2)注明:1、前臺js中refresh的參數(shù)為標(biāo)準(zhǔn)的sql語句,用來拼接到主sql語句中作為子查詢語句2、屬性implservice_querymethod中設(shè)置的方法名不用帶參數(shù)和括號,但是在定義接口類的時候,參數(shù)必須符合以下格式: query(String[]attrList,StringaCondition,MapaParameterList,intaStartNum,intaEndNum,booleanaFkFlag,String[]aExtenBOArray) 原因是該方法最終將調(diào)用Engine類中的以下方法: getBeans(String[]cols,Stringcondition,Mapparameter, intstartNum,intendNum,booleanisShowFK,String[]extendBOAttrs) 所以參數(shù)格式必須嚴(yán)格匹配,而參數(shù)的獲取則是通過refresh方法傳遞的參數(shù)或者web層的代碼來實現(xiàn)的。頁面數(shù)據(jù)保存繼承BaseAction實現(xiàn)一個保存類。并且保存方法應(yīng)該寫成如下方式:

publicvoidsaveData(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{DataContainerList[]dcLists=HttpUtil.getDataContainerLists(request.getInputStream(),null);save(request,response,dcLists);//具體實現(xiàn)保存的方法

}注意事項HttpServletRequestrequest,HttpServletResponseresponse必須做為保存方法的參數(shù)通過HttpUtil.getDataContainerLists(request.getInputStream(),null);獲取頁面?zhèn)鱽淼男枰4娴臄?shù)據(jù),APPFrameV5.0會自動把這些數(shù)據(jù)轉(zhuǎn)換為dataContainer數(shù)組,對于簡單的頁面參數(shù),可以通過request.getParameter()獲取。如果頁面數(shù)據(jù)源set不是根據(jù)BO對象配置的,那么保存方法不能使用APPFrameV5.0的缺省實現(xiàn)defaultAction。如果頁面數(shù)據(jù)源set是根據(jù)BO對象配置的,但又不希望使用APPFrameV5.0缺省的保存方法,或者在保存方法中還需要處理其他邏輯,可以參考com.ai.appframe2.web.defaultAction的寫法完成自己的保存。對DBGrid,每次修改、新增、刪除只處理一頁數(shù)據(jù),翻頁前注意保存。練習(xí)case3以Demo為例,實現(xiàn)單表的保存DBTreeNewDBTreeNew是一個Tag標(biāo)簽組件,從指定的數(shù)據(jù)模型datamodel類中獲取數(shù)據(jù),在頁面中以tree的方式顯示數(shù)據(jù)。

有關(guān)DBTreeNew的定義主要包含在DBTree_New.js文件中,一個DBTreeNew的樣式如下:DBTreeNew實現(xiàn)原理與原有基于javascript構(gòu)造的DBTree組件不同,DBTreeNew將節(jié)點的數(shù)據(jù)構(gòu)造交由二次開發(fā)人員實現(xiàn)。Tree在展開節(jié)點時,從后臺DataModel中獲取其子節(jié)點的數(shù)據(jù),進(jìn)而構(gòu)成UI顯示。做到了真正意義上的分層讀取。為了版本兼容需要。原有DBTree組件繼續(xù)保留。但推薦使用新的DBTreeNew組件。Com.ai.appframe2.web.tag.tree.DBTreeNewDataModelInterface.java

是DBTreeNew的數(shù)據(jù)model接口,Tag類中datamodel屬性指定的類必須實現(xiàn)該接口DBTreeNew接口說明(1)DBTreeNew標(biāo)簽選項

通常,在一個jsp文件中,DBTreeNew標(biāo)簽使用方法如下:<ai:dbtree_newid="xx"datamodel="demo.newtree.TreeDemoDataModel"multiselect="true"height=""width="300"onclick="aa"oncheckboxclick="bb"/>DBTreeNew接口說明(2)支持的事件onselect:節(jié)點選中觸發(fā)該事件oncheckboxclick:多選狀態(tài)下,鼠標(biāo)點擊checkbox觸發(fā)事件onrightclick:右鍵點擊節(jié)點觸發(fā)事件DBTreeNew接口說明(3)js對象g_DBTreeNewManagerg_DBTreeNewManager對象是APPFrameV5.0內(nèi)建的DBTreeNew數(shù)據(jù)集管理器,對頁面內(nèi)的所有DBTreeNew對象進(jìn)行管理。g_DBTreeNewManager在頁面加載時自動構(gòu)建。

方法說明:Get(pk):參數(shù)pk為DBTreeNew唯一標(biāo)識treeID,通過該方法獲得DBTreeNew數(shù)據(jù)集的引用。使用范例:

vardbtree=g_DBTreeNewManager.get(treeID);DBTreeNew接口說明(4)js對象DBTreeNew提供的方法

js文件:jsv2/DBTree_New.js提供對DBTreeNew有用操作的方法,對開發(fā)人員至關(guān)重要。tree.getSelectionPath();返回從root到當(dāng)前選中節(jié)點的path路徑數(shù)組。數(shù)組中是節(jié)點的值(val)tree.getCurNodeInfo();得到當(dāng)前點擊節(jié)點的信息返回元素為Object對象,Object對象包括以下屬性O(shè)bejct.value,Object.text,Object.userobjtree.getCheckedNodesInfo();多選狀態(tài)下得到選中的節(jié)點的信息數(shù)組。數(shù)組中的元素為Object對象,包括Object.value,Object.text,Object.userobjtree.clearSelection();單選狀態(tài)下清空當(dāng)前節(jié)點。多選狀態(tài)下不僅清空當(dāng)前節(jié)點,還清空所有checkbox的選中狀態(tài)……(具體見demo或二次開發(fā)手冊)DBTreeNew的優(yōu)化該功能主要是為解決頁面上報樹控件“查詢條件過期”而改造的。引起問題的主要原因是因為加載一個樹控件時,這個樹的相關(guān)信息是存放在WEB服務(wù)的一個緩存隊列中,但是該隊列有最大數(shù)量限制,所以當(dāng)頁面上樹控件太多的時候,可能導(dǎo)致一個在用的樹控件信息被擠出隊列,導(dǎo)致“查詢條件過期”的問題。解決該問題的思路是:加載一個樹控件后,將該控件的相關(guān)信息存放在IE客戶端,當(dāng)加載子節(jié)點或者刷新某節(jié)點時,將這個樹控件的相關(guān)信息發(fā)到后臺,后臺重新構(gòu)造相關(guān)對象。因為樹的相關(guān)信息是存放在IE客戶端,所以永遠(yuǎn)不會導(dǎo)致樹信息被擠出WEB緩存隊列的問題。使用方式:需要開發(fā)人員在樹的DataModle代碼中,除了實現(xiàn)com.ai.appframe2.web.tag.dbtree.DBTreeNewDataModelInterface這個標(biāo)準(zhǔn)接口外,還得實現(xiàn)com.ai.appframe2.web.tag.dbtree.DBTreeUseLocalCacheInterface這個接口。該接口里頭沒有定義任何方法,不需要開發(fā)人員增加其它額外的JAVA代碼。使用限制:并不是所有樹的DataModle都可以實現(xiàn)該接口。使用該接口的前提是:該DataModle中沒有定義公共變量,或者所有的公共變量只針對當(dāng)前的一次操作有效(這一次操作可能是加載樹控件、加載子節(jié)點,或者刷新一個樹節(jié)點)。練習(xí)case4構(gòu)造一個DBTree_new,顯示組織(organize表)信息。PopMenuPopMenu是頁面彈出式菜單。PopMenu的實現(xiàn)包含在PopMenu_v2.js中。一個頁面彈出菜單的樣式如下:PopMenu實現(xiàn)原理PopMenu的實現(xiàn)采用顯示控件和數(shù)據(jù)源DataModel分離的方式PopMenu的數(shù)據(jù)源可以是頁面直接構(gòu)造,也可以通過normalRowSet的create()方法從服務(wù)器獲取。PopMenu接口說明(1)

js對象AIPopMenuModel

AIPopMenuModel是彈出式菜單的數(shù)據(jù)源,構(gòu)造方法:

varmodel=newAIPopMenuModel();AIPopMenuModel對象提供的方法:addPopMenuItem(pItemId,pItemName,pParentItemId,pFuncName):增加一個菜單項addPopMenuItemByRowSet(pRowSet,pIdCol,pNameCol,pParentIdCol,pFuncCol):通過NormalRowSet增加菜單項addSeparator(pParentId):增加兩個菜單項之間的分隔符‘-’PopMenu接口說明(2)

js對象AIPopMenuAIPopMenu是彈出式菜單的頁面控件,構(gòu)造方法:

varpopMenu=newAIPopMenu(AIPopMenuModel);AIPopMenu對象提供的方法:showPopMenu():顯示菜單hidePopMenu():隱藏菜單setItemEnabledById(pItemIdStr,flag):按ID設(shè)置菜單項enabled屬性,flag=ture/falsesetItemHideById(pItemIdStr,flag):按ID設(shè)置菜單項隱藏removeItemById(pItemId):按菜單項ID刪除……練習(xí)case5以case1的Grid為基礎(chǔ),頁面前臺直接構(gòu)造PopMenu,要求右鍵點擊Grid時彈出PopMenu,第一層菜單為“opchoose”和“other”,第二層為“add”,“del”,“copy”,上級菜單為“opchoose”。DBListBox除了在DBForm、DBGrid中使用下拉列表,也可以用tag實現(xiàn)下拉列表框有關(guān)DBListBox的定義主要包含在DBListBox.js文件中DBListBox接口說明(1)DBListBox標(biāo)簽選項通常,在一個jsp文件中,DBListBox標(biāo)簽使用方法如下:支持方法

onchange:列表改變時,需要調(diào)用的事件函數(shù)名稱

<ai:listboxds="com.ai.sysmgr.staff.Staff"showtype="list"multiselect="true"listsize="8"parameters="org_id=40"nulltext="請選擇"id="test1"width="400"onchange="abc"nullid="-1"/>DBListBox接口說明(2)js對象提供的方法getID():獲取選中ID值getValue():獲取文本值setValue(value):設(shè)置下拉數(shù)據(jù)源的選中項目addItem(id,value):增加一個選項optiondelItem(value):刪除指定value的optiondelSelItem():刪除選定的optionrefresh(para):根據(jù)參數(shù)重新刷新數(shù)據(jù),參數(shù)名稱與ds中的參數(shù)名稱相同getAllItem():返回列表中所有的值和text練習(xí)case6以case1中的staff.bo為基礎(chǔ),配置一個staff.ds,參數(shù)為org_id(即令organize_id=:org_id),由頁面?zhèn)魅?。顯示一個listbox(以staff.ds為數(shù)據(jù)源),三個按鈕:“add”,“delSel”,“getall”,點擊時分別實現(xiàn)增加一個value為“test”的option,刪除選中的option,獲得所有option的id和value。日期控件除了根據(jù)set配置生成外(一般是在DBForm、DBGrid中使用),可以使用平臺提供的js對象直接生成日期控件。示例代碼:varmDate=newDate();varmYear=mDate.getYear();varmMonth=mDate.getMonth()+1;varmDay=mDate.getDate();varcurrent=mYear+"-"+mMonth+"-"+mDay;varceaseDate=DBDate(current);document.all.item("ceaseTimeDiv").appendChild(ceaseDate);Tab頁tab頁是一種常用組件,顯示效果如下:實現(xiàn)原理——通過兩個標(biāo)簽tab和tabitem實現(xiàn)。Tab頁接口說明tab和tabitem標(biāo)簽選項

通常,在一個jsp文件中,標(biāo)簽使用方法如下:方法:

setTabItem(tabId,itemId):設(shè)置當(dāng)前tabpage<ai:tabid="test"height="300"width="500"getParameter="getParameter"><ai:tabitemid="f1"src="f1.htm"title="f1"/><ai:tabitemid="f2"src="f2.htm"title="f2"/></ai:tab><scriptlanguage=javascript>functiongetParameter(itemId){return"item="+itemId;}</script>練習(xí)case7顯示一個tab頁,包括兩個tabitem,點第一個tabitem顯示case1的頁面,點第二個tabitem顯示case2的頁面邏輯層功能介紹服務(wù)服務(wù)將包含在企業(yè)應(yīng)用中的離散業(yè)務(wù)功能提取出來,將其組合為可復(fù)用的、基于標(biāo)準(zhǔn)的服務(wù),從而可以在Appframe運行環(huán)境中部署,成為SOA體系架構(gòu)中的組件。使用服務(wù),就享有了服務(wù)的松耦合和高復(fù)用性的特點。舉例來說,客戶服務(wù)的使用,在BBOSS中,上海移動、浙江移動、或者廣西移動,對集團(tuán)客戶信息展示來說,前臺展示集團(tuán)客戶的信息應(yīng)該是基本一樣的,因此前臺頁面和客戶服務(wù)的接口在上述三個移動公司的BBOSS系統(tǒng)中可以保持不變,幾乎可以完全復(fù)用。如果后臺的數(shù)據(jù)存儲也一樣的話,客戶服務(wù)的實現(xiàn)也可以完全重用。如果后臺的數(shù)據(jù)存儲根本不一樣,則只要修改客戶服務(wù)的實現(xiàn),在BCE中修改接口的服務(wù)實現(xiàn),指向新的服務(wù)實現(xiàn),前臺和服務(wù)接口無需做任何改變,實現(xiàn)了系統(tǒng)的前后臺的松耦合。服務(wù)的類型 簡單對象服務(wù)單實例的POJO服務(wù)EJB服務(wù)WebService服務(wù)APPFrame自定義的action服務(wù)JBOSS服務(wù)簡單對象服務(wù)

<serviceid="IEventService"name="簡單對象服務(wù)"interface="service.addmodule.IEventService"listen="false"> <impl-definetype="simple"use="true" impl-class="service.addmodule.IEventServiceImpl"> </impl-define></service>單實例的POJO服務(wù)

<serviceid="IServiceIndependence"name="單實例服務(wù)"interface="service.addmodule.IServiceIndependence"listen="false"> <impl-definetype="singleton"use="true" transaction-name="abc" transaction-type="independence" Impl-class="service.addmodule.IServiceIndependenceImpl"> </impl-define></service>ejb服務(wù)

<moduleid="service"name="服務(wù)測試模塊"ejb-deploy="boss20"><serviceid="IEJBService"name="EJB服務(wù)測試"interface="erfaces.TestHello"listen="false"> <impl-definetype="ejb"use="true"jndi="ejb.TestHello"

home-interface="erfaces.TestHelloHome"></impl-define></service></module>輔助說明:ejb-deploy="boss20":指明用到的ejb服務(wù)器boss20,boss20是在ai-service-config.xml中定義的webservice服務(wù)

<moduleid="service"name="服務(wù)測試模塊"ejb-deploy="boss20" action-deploy="web222"webservice-deploy="web20"> <serviceid="IHelloWorld"name="webservice測試" interface="webservice.IHelloWorld"listen="false"> <impl-definetype="webservice"use="true" impl-class="services/HelloWorld"> </impl-define> </service></module>輔助說明:webservice-deploy="web20":指明用到的webservice服務(wù)器是web20,web20是在ai-service-config.xml中定義的Appframe自定義的action服務(wù)

<moduleid="service"name="服務(wù)測試模塊"ejb-deploy="boss20"action-deploy="web222"webservice-deploy="web20"> <serviceid="IActionService"name="action測試" interface="service.addmodule.IActionService"listen="false"> <impl-definetype="action"use="true"transaction-name="abc" transaction-type="join" impl-class="service.addmodule.IActionServiceImpl"> </impl-defin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論