版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 編 號: </p><p> 審定成績: </p><p><b> 畢業(yè)設(shè)計(論文)</b></p><p> 填表時間:2010年 04月</p><p><b> 教務(wù)處制</b></p><
2、p> 設(shè)計(論文)題目:基于mvc模式的CRM框架的研究與改進</p><p><b> 摘 要</b></p><p> 目前,國內(nèi)中小企業(yè)迅速發(fā)展,導(dǎo)致落后的客戶關(guān)系管理能力已經(jīng)很難滿足這些企業(yè)的需求,在這樣的狀況之下,開發(fā)新的客戶關(guān)系管理系統(tǒng)成了企業(yè)提高管理能力的有效手段。為了解決這一問題,我開始研究針對中小企業(yè)的客戶關(guān)系管理系統(tǒng)框架Bosent C
3、RM,通過研究開發(fā)更好的客戶關(guān)系管理系統(tǒng)。</p><p> 軟件開發(fā)框架是一個值得我們研究的課題,一個優(yōu)秀的框架可以節(jié)約大量的開發(fā)成本。在當(dāng)今J2EE開發(fā)領(lǐng)域,MVC設(shè)計模式是一個非常重要的架構(gòu)模式,它能幫助我們建立起強壯的、高效率的、可伸縮的框架平臺。</p><p> 本論文首先簡述了MVC設(shè)計模式的基本概念,其次論述了針對客戶關(guān)系管理系統(tǒng)的Bosent CRM框架實現(xiàn)MVC模式
4、的原理,并且詳細論述了mvc各個部分的實現(xiàn)原理,其中包括它的視圖形成過程、控制器的原理以及模型原理,重點在于菜單形成過程以及表單數(shù)據(jù)的綁定機制。最后分析本框架的一些優(yōu)點與不足。</p><p> 最后本論文結(jié)合北京長信通信息技術(shù)有限公司的客戶關(guān)系管理系統(tǒng),在使用Bosent Crm開發(fā)與測試過程中發(fā)現(xiàn)的問題對框架進行改進。</p><p> 【關(guān)鍵詞】 CRM MVC設(shè)計模式
5、 改進 </p><p><b> ABSTRACT</b></p><p> At present, the rapid development of domestic small and medium enterprises, leading to customer relationship management capabilities backwar
6、d has been difficult to meet the needs of these enterprises in under such a situation to develop new enterprise customer relationship management system became an effective means to improve management capacity. To solve t
7、his problem, I began to study customer relationship management for small and medium system framework Bosent CRM, through research and develo</p><p> [Key words] CRM MVC Transformation</p><p&
8、gt;<b> 聲明</b></p><p><b> 畢業(yè)論文獨創(chuàng)性聲明</b></p><p> 秉承學(xué)校嚴謹?shù)膶W(xué)風(fēng)和優(yōu)秀的科學(xué)道德,本人鄭重聲明,所呈交的論文是我個人在導(dǎo)師與項目經(jīng)理指導(dǎo)下進行的研究工作及取得的研究成果。盡我所知,除了論文中特別注明和致謝的地方外,論文中不包含其他人已經(jīng)發(fā)表和撰寫的研究成果。特此聲明。</p>
9、;<p> 本人簽名: 日期:</p><p><b> 目 錄</b></p><p><b> 摘 要2</b></p><p> ABSTRACT3</p><p><b> 聲明4</b
10、></p><p><b> 目 錄5</b></p><p><b> 緒 論7</b></p><p> 第一章研究概述8</p><p> 第一節(jié)研究背景8</p><p> 第二節(jié)研究內(nèi)容及目標(biāo)8</p><p&
11、gt; 第三節(jié)本章小結(jié)8</p><p> 第二章J2EE平臺與MVC設(shè)計模式9</p><p> 第一節(jié)J2EE體系結(jié)構(gòu)9</p><p><b> 一、概述9</b></p><p><b> 二、體系結(jié)構(gòu)9</b></p><p> 第二
12、節(jié)MVC設(shè)計模式概述10</p><p> 第三節(jié)本章小結(jié)11</p><p> 第三章Bosent Crm框架MVC原理12</p><p> 第四節(jié)控制器13</p><p> 一、控制器類13</p><p> 二、共享數(shù)據(jù)區(qū)17</p><p> 三、
13、配置文件18</p><p><b> 第五節(jié)模型20</b></p><p> 一、Action錯誤!未定義書簽。</p><p> 二、JavaBean22</p><p> 三、數(shù)據(jù)庫連接池23</p><p><b> 第六節(jié)視圖25</b
14、></p><p> 一、視圖原理25</p><p><b> 二、菜單27</b></p><p><b> 三、標(biāo)簽庫30</b></p><p> 第七節(jié)本章小結(jié)30</p><p> 第四章Bosent Crm平臺的功能改進30&
15、lt;/p><p> 第一節(jié)權(quán)限體系改造30</p><p> 一、功能需求30</p><p> 二、改造基本思路31</p><p> 三、修改過程31</p><p> 第二節(jié)表單重復(fù)提交問題32</p><p> 一、問題描述32</p>&
16、lt;p> 二、同步令牌機制32</p><p> 三、Bonsent CRM改造詳細說明34</p><p> 第三節(jié)標(biāo)簽顯示錯誤問題36</p><p> 一、錯誤現(xiàn)象36</p><p> 二、錯誤分析37</p><p> 三、修改說明37</p><
17、;p> 第四節(jié)增強日志功能錯誤!未定義書簽。</p><p> 一、問題描述錯誤!未定義書簽。</p><p> 二、實現(xiàn)方案錯誤!未定義書簽。</p><p> 第五節(jié)增加集群功能38</p><p> 一、集群(cluster)和負載均衡的基本概念38</p><p> 二、
18、Bosent CRM平臺可以使用集群39</p><p> 三、使用JGroups技術(shù)實現(xiàn)集群40</p><p> 第六節(jié)本章小結(jié)41</p><p><b> 結(jié) 論42</b></p><p><b> 致 謝43</b></p><p>&l
19、t;b> 參考文獻44</b></p><p><b> 附 錄45</b></p><p><b> 緒 論</b></p><p> 客戶關(guān)系管理系統(tǒng)是企業(yè)為了滿足每個客戶的特殊需求,同每個客戶建立聯(lián)系,通過同客戶的聯(lián)系來了解客戶的不同需求,并在此基礎(chǔ)上進行"一對一"
20、;個性化服務(wù)。</p><p> CRM廠商大致可以分成三類,第一類是國際大型軟件廠商,如Oracle、SAP等,他們的客戶定位主要在國內(nèi)特大型企業(yè),或者國內(nèi)五百強企業(yè)。另外一類是用友、金蝶,還有國內(nèi)傳統(tǒng)的幾家大型管理軟件的企業(yè),這類企業(yè)更多的是聚焦在中大型企業(yè)身上,他們可能有自己獨立的產(chǎn)品,包括自己的服務(wù)體系,金額大概幾百萬到幾千萬范圍。第三類是一些中小型軟件廠商,這類廠商主要聚焦在中小型企業(yè)或者快速發(fā)展型的
21、企業(yè)身上。</p><p> 目前的中小企業(yè)在發(fā)展過程中,往往存在著非常多的困難,特別是客戶管理,從最早的紙質(zhì)表格到之后的excel報表,到如今的CRM系統(tǒng),可以說,每一次改革,都是一次質(zhì)的飛躍。而如今,市場競爭異常激烈,一個企業(yè)最重要的資源是什么:無非就是公司的員工和客戶資源;而客戶資源如何獲???如何非常好的管理這些客戶資源,也許這是一個令中小企業(yè)一個非常頭痛的難題。 </p><p>
22、; 本論文研究的是針對中小企業(yè)客戶關(guān)系管理的Bosent Crm框架,它是一種基于MVC模式的B/S結(jié)構(gòu)的框架,它的前身是Intel公司投資的一個小型開源應(yīng)用框架Centric CRM 2.9 。在研究Bosent Crm框架基礎(chǔ)上對該框架的各個層次的組成、功能進行了詳細的描述,并在熟悉框架的基礎(chǔ)上對框架進行改進,包括權(quán)限體系改進、表單重復(fù)提交、標(biāo)簽顯示錯誤、增強日志功能和集群功能。</p><p><b
23、> 研究概述</b></p><p><b> 研究背景</b></p><p> 上世紀(jì)90年代初,隨著Internet的出現(xiàn)和迅速發(fā)展,國外的CRM應(yīng)用開始投入使用 ,到如今發(fā)展已經(jīng)非常的強大,例如美國的ORACLE、德國的SAP等。</p><p> 目前隨著國內(nèi)中小企業(yè)的迅速發(fā)展,國內(nèi)中小企業(yè)為了提高客戶滿意度
24、,必須完整掌握客戶信息,準(zhǔn)確把握客戶要求,快速響應(yīng)個性化需求,提供便捷的購買渠道、良好的售后服務(wù)。但是傳統(tǒng)的客戶關(guān)系管理系統(tǒng)難以達到目的,尤其是在國內(nèi),許多企業(yè)的內(nèi)部管理混亂隨意,有的企業(yè)從過去的“計劃經(jīng)濟”體制下改革而來,對客戶管理缺乏了解,沒有經(jīng)驗。因此對客戶關(guān)系管理系統(tǒng)的研究具有重要意義。</p><p><b> 研究內(nèi)容及目標(biāo)</b></p><p>
25、該論題來源于北京長信通信息技術(shù)有限公司的客戶關(guān)系管理系統(tǒng)的二次開發(fā),在公司的客戶關(guān)系管理系統(tǒng)需求等變化的情況下,我開始研究公司的客戶關(guān)系管理系統(tǒng)開發(fā)所使用的Bosent CRM框架。</p><p> 研究的主內(nèi)容就是Bosent CRM 框架在J2EE平臺體系之下實現(xiàn)MVC設(shè)計模式的原理。論文首先介紹J2EE平臺的體系結(jié)構(gòu)與MVC設(shè)計模式,其次論述了Bosent CRM實現(xiàn)MVC設(shè)計模式的整個過程。<
26、/p><p> 研究目標(biāo)是在深入理解J2EE體系結(jié)構(gòu)的基礎(chǔ)上,深入研究Bosent CRM 框架的原理,并對Bosent CRM框架進行改進,使開發(fā)出更好的客戶關(guān)系管理系統(tǒng)。</p><p><b> 本章小結(jié)</b></p><p> 本章主要介紹我研究的課題的背景,并介紹了在這樣的背景之下我研究的課題的內(nèi)容以及研究的目標(biāo)。</p&
27、gt;<p> J2EE平臺與MVC設(shè)計模式</p><p><b> J2EE體系結(jié)構(gòu)</b></p><p><b> 概述</b></p><p> J2EE是一種利用Java2平臺來簡化企業(yè)解決方案的開發(fā)部署和管理相關(guān)的復(fù)雜的體系結(jié)構(gòu)。它的核心技術(shù)就是java平臺標(biāo)準(zhǔn)版,J2EE中不僅保留了j
28、ava2標(biāo)準(zhǔn)中的優(yōu)點,例如平臺的可移植性特性,數(shù)據(jù)庫處理的JDBC接口,CORBA技術(shù)已經(jīng)能夠在Internet應(yīng)用中保護數(shù)據(jù)的安全模式,還提供了對EJB,Servlet,JSP、XML技術(shù)的支持。J2EE平臺的出現(xiàn)使得企業(yè)開發(fā)者大幅度縮短軟件開發(fā)時間,它提供中間件集成框架用來滿足無需太多費用而又需要高可靠性,高可用性和可擴展性的需求。</p><p> 實際上,J2EE平臺最大的優(yōu)點在于它提供了統(tǒng)一標(biāo)準(zhǔn),并且
29、是開源的。只要按照J2EE標(biāo)準(zhǔn)開發(fā)出的中間件,都可以在J2EE容器中運行,這是得中間件的可移植性提高,并且專注于J2EE標(biāo)準(zhǔn)的進行開發(fā)web應(yīng)用的人員可以自由編寫中間件。</p><p><b> 體系結(jié)構(gòu)</b></p><p> J2EE體系結(jié)構(gòu)主要包括客戶端、表示層、業(yè)務(wù)邏輯層、后臺支持系統(tǒng)組成。詳述如下:</p><p> 客戶端
30、:括IE和應(yīng)用客戶端。</p><p> 表示層:主要是web服務(wù)器,典型的web表示層包括jsp、servlet組件。</p><p> 業(yè)務(wù)邏輯層:包括JavaBean、EJB,它們根據(jù)規(guī)則進行業(yè)務(wù)邏輯處理。</p><p> 后臺支持系統(tǒng):主要是指數(shù)據(jù)庫服務(wù)器。</p><p><b> J2EE體系結(jié)構(gòu)圖</b
31、></p><p> 本論文主要研究的是表示層和業(yè)務(wù)邏輯層用MVC結(jié)構(gòu)實現(xiàn)。</p><p><b> MVC設(shè)計模式概述</b></p><p> 模型-視圖-控制器(下文簡稱為“MVC”)設(shè)計模式是Xerox PARC 在20世紀(jì)80年代為編程語言Smalltalk 80發(fā)明的用于用戶交互應(yīng)用程序的一種軟件設(shè)計模式,它將表現(xiàn)邏輯
32、與業(yè)務(wù)邏輯分開,并且使用一個控制器控制表現(xiàn)邏輯與業(yè)務(wù)邏輯,使它們能夠有序的工作。這種三層架構(gòu)廣泛應(yīng)用于基于J2EE的web系統(tǒng)中,其原理如下圖所示:</p><p> 模型-視圖-控制器三層架構(gòu)圖</p><p> MVC設(shè)計模式主要的組成部分包括:</p><p> 視圖:它是和用戶交互的界面,用來顯示應(yīng)用系統(tǒng)數(shù)據(jù),并能接收用戶輸入的數(shù)據(jù)。但是它并不進行任何
33、實際的業(yè)務(wù)處理。視圖可以向模型查詢業(yè)務(wù)狀態(tài),但是不能改變模型。視圖還能接受模型發(fā)出的數(shù)據(jù)更新事件,從而對用戶界面進行同步更新。需要注意的是:在基于請求/響應(yīng)模式的web應(yīng)用系統(tǒng)中,模型位于web服務(wù)器端,視圖位于用戶瀏覽器端,而無法做到模型向視圖主動發(fā)出數(shù)據(jù)更新事件,使用戶界面能自動刷新。</p><p> 模型:它是應(yīng)用系統(tǒng)的主體。模型表示業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)邏輯。一個模型能為多個視圖提供數(shù)據(jù)。由于同一個模型可以被
34、多個視圖重用,因此提高了應(yīng)用的可重用性。</p><p> 控制器:它是用來接受用戶的輸入并調(diào)用模型和視圖完成用戶的需求。當(dāng)web用戶單擊web頁面中的提交按鈕發(fā)送HTML表單時,控制器接收請求并調(diào)用相應(yīng)的模型組件來處理請求,然后調(diào)用相應(yīng)的視圖顯示模型返回的數(shù)據(jù)。</p><p><b> MVC模型的優(yōu)點:</b></p><p> 在
35、傳統(tǒng)的web系統(tǒng)中,通常將操作數(shù)據(jù)庫的數(shù)據(jù)層代碼和html這樣的表現(xiàn)層代碼混合在一起。而MVC模型從根本上強制性的將它們分開,這樣的好處是:</p><p> 多個視圖可以共享一個模型。在MVC模型中,模型響應(yīng)用戶請求并返回響應(yīng)數(shù)據(jù),視圖負責(zé)格式化數(shù)據(jù)并將數(shù)據(jù)顯示給用戶,業(yè)務(wù)邏輯和表示層分離,同一個模型可以被不同的視圖重用,大大提高了代碼的可重用性;</p><p> 模型是自包含的,
36、和控制器、視圖保持相對獨立,可以方便改變應(yīng)用程序的數(shù)據(jù)層和業(yè)務(wù)邏輯,能構(gòu)造良好的松耦合的構(gòu)件;</p><p> 控制器提高了應(yīng)用程序的靈活性和可配置性??刂破骺梢杂脕磉B接不同的模型和視圖去完成用戶的需求,也可以為構(gòu)造應(yīng)用程序提供強有力的手段。</p><p><b> 本章小結(jié)</b></p><p> 本章主要介紹了J2EE體系結(jié)構(gòu)和
37、MVC設(shè)計模式的原理。</p><p> Bosent Crm框架MVC原理</p><p> Bosent Crm架構(gòu)是基于J2EE體系之下的中間件框架,它采用MVC設(shè)計模式,它是類似struts1.x的架構(gòu),其中使用一個servlet作為控制器,目前使用jsp模板構(gòu)建視圖(框架支持Xsl模板,但目前還沒有實現(xiàn)),使用自定義標(biāo)簽庫使業(yè)務(wù)邏輯與視圖分離,使用JavaBean實現(xiàn)數(shù)據(jù)模型
38、,使用action處理業(yè)務(wù)邏輯。它的架構(gòu)如下圖所示:</p><p> Bosent CRM請求-應(yīng)答的具體流程描述如下:</p><p><b> 控制器部分</b></p><p> 當(dāng)客戶端發(fā)出web請求時,請求將被控制器中的Service方法接收到;</p><p> 首先,在Service方法中會調(diào)用
39、SecurityHook(安全鉤子)對請求進行安全檢驗,但是不處理名稱為LOGIN、SETUP、UPGRADE、LICENSESERVER和PROCESS的請求;對PORTAL請求進行特殊處理,以創(chuàng)建用戶session,在SecurityHook中如果檢查到是第一次調(diào)用,則還會創(chuàng)建SystemStatus對象;</p><p> 然后,將從頁面?zhèn)鬟f來的數(shù)據(jù)綁定為和Action對應(yīng)的Formbean對象;<
40、/p><p> 隨后,調(diào)用Action,執(zhí)行Action中定義的方法;</p><p> 最后,處理完后調(diào)用Forward方法;</p><p> Action:架構(gòu)中的模型部分</p><p> Action中定義了業(yè)務(wù)邏輯,實現(xiàn)業(yè)務(wù)處理和數(shù)據(jù)庫的交互。</p><p><b> 視圖部分</b
41、></p><p> 在Forward方法中,根據(jù)action配置文件,決定是調(diào)用action,還是根據(jù)XSL模板生成頁面(目前沒有實現(xiàn)),還是返回jsp頁面,在jsp頁面中菜單的形成是可配置的,通過在XML文件中配置菜單包括它的鏈接,使得在視圖非常的靈活可配置。最終將生成的菜單添加到JSP模板中形成視圖發(fā)送給客戶端瀏覽器。</p><p><b> 控制器</b
42、></p><p><b> 控制器類</b></p><p> 控制器類是一個Servlet類,它是MVC機制的核心類,它控制整個框架有秩序的工作。這個控制器除了實現(xiàn)了HttpServlet接口外,還實現(xiàn)了其它的鉤子接口,這也是框架可擴展性的體現(xiàn)。控制器servlet主要的三個生命周期方法init、service、destroy。</p>&
43、lt;p> 在init方法中解析一個xml文件得到視圖與模型之間的映射關(guān)系,并提供全局的HashMap類型的變量保存這些映射關(guān)系提供多線程使用。當(dāng)用戶請求URL被service方法接收到,首先解析整個URL得到要處理的action名稱,根據(jù)名稱反射生成action類的實例并調(diào)用相關(guān)的方法處理請求,servlet提供全局的HashMap類型的變量緩存這些action實例,這樣做的好處是當(dāng)服務(wù)器配置支持多線程時,第一個用戶請求了這個
44、action后其它用戶可以直接到HashMap類型的實例緩存中查找并使用這個實例。詳細論述如下:</p><p><b> 控制器初始化</b></p><p> 控制器類的初始化包括整個匡架的共享數(shù)據(jù)初始化、鉤子類的初始化,這些類都是通過配置文件配置,然后解析XML文件得到配置信息,再通過反射機制生成這些類的實例。所有這個框架的很多資源都是可配置的。例如,在we
45、b.xml文件中配置servlet的初始化參數(shù),容器解析初始化參數(shù)并傳遞給控制器servlet的初始化方法。具體的處理流程如左圖所示。</p><p> 控制器的service方法</p><p> service方法是整個框架核心的方法,客戶端瀏覽器發(fā)出請求,Tomcat容器將請求參數(shù)封裝成HttpRequest對象,并創(chuàng)建HttpResponse對象,將這兩個對象傳遞到servic
46、e方法,service方法中讀取HttpRequest對象中封裝的請求信息,從請求URL中讀取出處理請求的action名稱,再反射生成action實例,調(diào)用action中的哪一個方法處理請求是由請求URL中的command參數(shù)值決定的。其中在數(shù)據(jù)傳遞過程中,框架的數(shù)據(jù)綁定機制是非常重要的,它不同于struts1.x數(shù)據(jù)綁定機制,在Struts1.x中表單bean類繼承ActionForm類才能實現(xiàn)參數(shù)綁定,而本框架是根據(jù)URL中傳遞的a
47、uto-populate參數(shù)值決定是否綁定參數(shù)的,這樣做了使系統(tǒng)的與框架之間的耦合性降低,系統(tǒng)可移植性得到提高。最終action的方法執(zhí)行返回常量字符串,調(diào)用forward方法跳轉(zhuǎn)到視圖。</p><p><b> 具體流程如圖所示:</b></p><p><b> 安全校驗</b></p><p> 安全校驗是框
48、架的重要的一個方面,它保證了框架的安全性。安全性校驗是在控制器類的service方法中進行的,它主要包括SSL安全驗證、驗證用戶會話的有效性、將用戶信息存放到session中,重點在于創(chuàng)建共享數(shù)據(jù)區(qū)SystemStatus對象,這個對象是一個框架本身提供的一個共享數(shù)據(jù)區(qū),它存放所有用戶共享數(shù)據(jù),這個在論文后面框架改進的集群(緩存同步)部分得到體現(xiàn)。流程圖如下圖所示:</p><p> 創(chuàng)建SystemStatu
49、s對象</p><p><b> 流程圖如下圖所示:</b></p><p> 獲取所有用戶數(shù)據(jù)(Hashtable類型)</p><p> 獲取系統(tǒng)參數(shù)數(shù)據(jù)(Site Preferences) (LinkedHashMap類型)</p><p> 配置工作流管理器參數(shù)</p><p>
50、 獲取全局權(quán)限數(shù)據(jù)(Role permission cache)</p><p> 獲取WebdavResources數(shù)據(jù)</p><p><b> 參數(shù)自動綁定</b></p><p> 參數(shù)綁定是整個框架中的重點,它是框架中數(shù)據(jù)從視圖層傳遞到模型層的關(guān)鍵所在。參數(shù)是否自動綁定是由請求URL中參數(shù)auto-populate參數(shù)值決定,
51、只要參數(shù)值為true,則會將請求對象HttpRequest中的參數(shù)信息綁定到相匹配的JavaBean中,再將JavaBean傳遞到模型層進行業(yè)務(wù)邏輯處理。</p><p> 而頁面數(shù)據(jù)和JavaBean數(shù)據(jù)的自動綁定是類com.darkhorseventures.framework.beans.BeanUtils實現(xiàn)的,原理是:</p><p> 從requset區(qū)域中獲得所有的參數(shù);
52、</p><p> 反射創(chuàng)建配置文件(cfs-config.xml)中定義的JavaBean;</p><p> 循環(huán)參數(shù),根據(jù)參數(shù)的名字,調(diào)用JavaBean中的“set+參數(shù)名字”方法,將參數(shù)值寫入JavaBean中;</p><p> 將JavaBean存放到requset區(qū)域中;</p><p> 控制器forward方法&l
53、t;/p><p> forward方法根據(jù)action執(zhí)行結(jié)果進行跳轉(zhuǎn),目前框架使用jsp模板實現(xiàn)視圖,框架也支持xsl模板。這個方法重點在于形成菜單的過程,包括主菜單、子菜單,然后把菜單信息封裝在JavaBean中傳遞到前臺的jsp模板中構(gòu)建視圖。這里的菜單是比較特別的,它是通過xml文件配置的,配置中包括主菜單、子菜單的層次結(jié)構(gòu)、名稱、鏈接、菜單權(quán)限以及格式css文件,通過解析配置文件得這些信息并封裝在Java
54、Bean中,傳遞給jsp模板。其實這樣做的好處是菜單非常的靈活,通過xml文件配置主菜單、子菜單,而不用修改代碼即可增加一個模塊。</p><p> 在流程圖如下圖所示:</p><p><b> 共享數(shù)據(jù)區(qū)</b></p><p> 共享數(shù)據(jù)區(qū)是這個框架比交重要的一個點,也是我在研究過程中遇到問題最多的一個地方,當(dāng)然最終還是理解了。&l
55、t;/p><p> 在Bosent CRM系統(tǒng)中共享數(shù)據(jù)區(qū)是用來存放系統(tǒng)共用的數(shù)據(jù),一般在系統(tǒng)啟動過程中構(gòu)建,用于存放系統(tǒng)級數(shù)據(jù),或者用戶共享的數(shù)據(jù)。</p><p> 共享數(shù)據(jù)區(qū)的層次關(guān)系如下圖所示:</p><p> 架構(gòu)內(nèi)置的共享數(shù)據(jù)區(qū)一共有三種:</p><p> SystemStatus:虛擬主機(Virtual Host)共享
56、數(shù)據(jù)區(qū)。主要從system.xml、workflow.xml等配置文件中載入數(shù)據(jù)。以及系統(tǒng)共享的“緩存的用戶數(shù)據(jù)”、 “Lookup Lists對象”和“workflow”對象等。</p><p> ServletContext:存放全局共享對象,例如ApplicationPrefs對象、ImportManager對象、Crontab、Scheduler等。</p><p> Appl
57、icationPrefs:上下文共享數(shù)據(jù)區(qū),存放全局共享對象的參數(shù)。需要特別注意:ApplicationPrefs存放的是存放在Servlet Context中對象的參數(shù),而不是對象本身,這點很重要。ApplicationPrefs主要從build.properties文件(build.properties文件位于安裝路徑下)中讀取參數(shù)。特別注意:build.properties文件包括數(shù)據(jù)庫連接數(shù)量這個重要參數(shù)。</p>
58、<p><b> 配置文件</b></p><p><b> 配置文件類型</b></p><p> 架構(gòu)內(nèi)置的共享數(shù)據(jù)區(qū)其數(shù)據(jù)主要來源于各種配置文件,將其分為三類:</p><p> 框架級配置文件,主要指web.xml,cfs-config.xml主要用于配置CRM框架;</p>&l
59、t;p> 安裝配置文件,主要指build.properties,此文件在安裝過程中形成;此參數(shù)主要存放在ApplicationPrefs對象中,是非常重要的數(shù)據(jù)對象;</p><p> 應(yīng)用系統(tǒng)配置文件:用于配置應(yīng)用系統(tǒng)模塊,例如action、菜單等。</p><p><b> 配置文件參數(shù)</b></p><p><b>
60、; 框架級配置文件</b></p><p><b> web.xml</b></p><p> web.xml配置文件主要用于配置CRM框架,它與容器交互。</p><p> cfs-config.xml</p><p> 該配置文件配置了action、jsp視圖和表單Bean三者之間的關(guān)系。通過該
61、配置文件控制器就可以按照規(guī)則來調(diào)用Bean綁定請求參數(shù)并調(diào)用相關(guān)的action處理請求,最終返回相應(yīng)的JSP視圖。這個配置文件在整個MVC框架中起到核心作用,控制整個流程。</p><p><b> 安裝配置文件</b></p><p> 安裝過程中會產(chǎn)生配置文件build.properties,此配置文件位于安裝路徑下(例如:C:\BosentCRM),主要存放
62、用戶配置系統(tǒng)的一些參數(shù). </p><p><b> 資源文件</b></p><p> 存放系統(tǒng)共用的數(shù)據(jù)字典數(shù)據(jù)。</p><p> 語言資源文件位于web應(yīng)用的\WEB-INF\languages目錄中,不同語種資源文件是一個由dictionary 加上語言代碼組成.xml文件,例如:dictionary_zh_CN.xml,具體
63、位置如下圖所示:</p><p> 資源文件主要內(nèi)容包括下面四個組成部分:</p><p> 標(biāo)識字符串標(biāo)志"system.fields.label"</p><p> 菜單字符串標(biāo)志"system.container.menu.label"</p><p> 子菜單字符串標(biāo)志"sys
64、tem.submenu.label"</p><p> 模板字符串標(biāo)志"system.modules.label"</p><p> system.xml</p><p> 在安裝過程中,system.xml文件被復(fù)制到安裝路徑下的數(shù)據(jù)庫名稱文件夾中,即fileLibrary/[database name]/system.xml。
65、</p><p> 此文件包含安裝時的配置數(shù)據(jù),標(biāo)簽庫和模塊能訪問這些數(shù)據(jù)。例如開發(fā)一個action能訪問第三方的數(shù)據(jù)庫,那么可以把數(shù)據(jù)庫連接信息存放在此文件中,而不用在action類中寫死。 </p><p><b> 應(yīng)用系統(tǒng)配置文件</b></p><p> cfs-modules.xml</p><p>
66、 此配置文件用于確定主菜單和子菜單的顯示順序,以及每個菜單項的權(quán)限。</p><p> Action以URL的形式映射到菜單項。</p><p> 其他的參數(shù)用來定義顯示在菜單項上的文字、定義權(quán)限標(biāo)識以及顯示在HTML頁面的標(biāo)題。例如下面的配置信息:</p><p><b> 模型</b></p><p> 模
67、型(Action)表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則。在MVC的三個部件中,模型擁有最多的處理任務(wù)。例如它可能用象EJBs和ColdFusion Components這樣的構(gòu)件對象來處理數(shù)據(jù)庫。被模型返回的數(shù)據(jù)是中立的,就是說模型與數(shù)據(jù)格式無關(guān),這樣一個模型能為多個視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需寫一次就可以被多個視圖重用,所以減少了代碼的重復(fù)性。</p><p><b> 基類</b><
68、/p><p> 在Bosent CRM框架中,所有的模型Action類都必須繼承基類org.aspcfs.modules.actions.CFSModule,其實也就是說基類CFSModule中定義了Action的公共功能,此類包含的比較重要的方法有:</p><p> freeConnection方法</p><p> 要對整個action中的異常捕獲,以釋放資
69、源,如數(shù)據(jù)庫連接的釋放。調(diào)用基類的方法。</p><p> 執(zhí)行Action缺省動作的executeCommandDefault方法;</p><p> 獲取SystemStatus共享數(shù)據(jù)的getSystemStatus(ActionContext context)方法;</p><p> 獲取當(dāng)前用戶的getUser方法;</p><p
70、> 獲取用戶列表的getUserTable方法;</p><p><b> 映射特性</b></p><p> 如果在Action中定義了多個處理業(yè)務(wù)邏輯的方法,就必須處理好映射特性:一般的,struts Web框架中的action只有一個固定服務(wù)方法(execute),而Bosent CRM的Action是一個多方法的action。通過在URL中定義方法
71、,讓控制器識別,并調(diào)用Action中對應(yīng)的方法。 </p><p> 之所以如此設(shè)計,是為減少action類的數(shù)量,選擇了在請求中映射方法的策略,也就是說Action在cfs-config.xml中可以有多個返回資源,各個資源在action中是一個方法的多個程序分支的返回,也可以是action的不同方法的返回。即:通過URL中的“command”參數(shù),可以將一個控制器中定義的方法映射到命令中。而不用像Strut
72、s1.0中為一個命令定義一個控制器。</p><p><b> 數(shù)據(jù)傳遞機制</b></p><p> 數(shù)據(jù)傳遞機制是框架的核心,無論是什么框架都必須思考的問題。通過配置文件,配置頁面中的JavaBean數(shù)據(jù)(例如<input>標(biāo)簽定義的數(shù)據(jù))和控制器之間的映射關(guān)系。</p><p> 例如cfs-config.xml文件中A
73、ction配置內(nèi)容如下所示: </p><p> 上述配置文件將名稱是“user”的UserBean類和名稱是login的action相關(guān)聯(lián)。特別注意的是:如果在URL中設(shè)置了“auto-populate=true”,則將實現(xiàn)參數(shù)自動綁定功能。例如下面的代碼:</p><p> <form name="login" method="POST"
74、; action="Login.do?command=Login&auto-populate=true"> </p><p> 將頁面中的用戶名和密碼自動綁定到JavaBean類LoginBean。</p><p> 開發(fā)者不需要在直接從request數(shù)據(jù)區(qū)中獲取數(shù)據(jù),而是頁面元素和JavaBean能自動綁定,這種功能其實類似于Struts1.0中的
75、ActionForm類的作用 auto-populate功能將HTML的“名稱-值”對映射到特定的JavaBean。</p><p> Action配置文件</p><p> Action配置文件包括\WebContent\WEB-INF 路徑下的cfs-config.xml和cfs-config-globalactions.xml, 主要用于配置用戶開發(fā)的Action。</p&
76、gt;<p><b> JavaBean</b></p><p> JavaBean是實現(xiàn)業(yè)務(wù)邏輯的關(guān)鍵類,因此必須遵守一定的規(guī)范,以加強代碼質(zhì)量。在Bosent CRM框架中必須按照如下規(guī)則開發(fā)JavaBean:</p><p> 所有新增JavaBean仍然依靠程序員手寫。</p><p> 不考慮加入DAO框架。原因
77、:加入DAO框架會破壞CRM原有的持久層體系,并且沒有直接手寫JavaBean靈活。</p><p> JavaBean繼承于GenericBean</p><p> 所有新增JavaBean都繼承于GenericBean,這個類是在包</p><p> com.darkhorseventures.framework.beans中的。</p>&
78、lt;p> 采用“主動域?qū)ο竽J健遍_發(fā)JavaBean</p><p> 并且仍然采用原來JavaBean的“主動域?qū)ο竽J健眮黹_發(fā),增,刪,改,查操作全部都封裝在同一個對象中,查詢返回的參數(shù)統(tǒng)一為泛型的ArrayList對象。原因:原有JavaBean的查詢模式太過復(fù)雜,直接在JavaBean的查詢方法里面返回結(jié)果集更易于理解和操作。</p><p> 沒有復(fù)雜的多表關(guān)聯(lián)查詢
79、功能,只對一個表進行操作</p><p> 數(shù)據(jù)庫連接仍然從外部傳入。所有新增的JavaBean都只針對本表操作,不操作其他JavaBean,SQL語句里面也不會有多表聯(lián)合操作,具體邏輯由上層程序去實現(xiàn)。原因:這樣做是為了簡化JavaBean的編寫,把邏輯從持久層抽取出來,由上層程序去實現(xiàn)。</p><p> 所有新增的JavaBean都不管理事務(wù)</p><p&g
80、t; 不容許在JavaBean的方法里出現(xiàn)commit和rollback。原因:如果在持久層管理事務(wù)的話會對程序邏輯造成混亂,特別是多表聯(lián)合操作的時候,并且使程序?qū)哟尾磺逦?,CRM原有的邏輯層次確實不夠清晰,但我們至少保證新增的程序邏輯層次清晰。</p><p><b> 數(shù)據(jù)庫連接池</b></p><p> Bosent CRM系統(tǒng)中會啟動多個線程,包括:
81、日志線程、后臺管理線程、主線程等。每個線程都要使用單獨的數(shù)據(jù)庫連接對象。為了讓多個線程高效使用數(shù)據(jù)庫連接,所以設(shè)計了復(fù)雜的數(shù)據(jù)庫連接緩存機制(即數(shù)據(jù)庫連接池)。</p><p><b> 數(shù)據(jù)庫連接管理類</b></p><p> 連接類(ConnectionElement類)</p><p> ConnectionElement類只是輔
82、助類,包含完整的建立新的數(shù)據(jù)庫連接對象所需的所有參數(shù),以及兩個輔助ConnectionPool類管理的兩個屬性:</p><p> activeDate屬性:表示激活(包括創(chuàng)建和再次使用)的時間</p><p> allowCloseOnIdle:當(dāng)連接空閑時,是否允許刪除,一般設(shè)置為true</p><p> 數(shù)據(jù)庫連接池類(ConnectionPool類)
83、</p><p> ConnectionPool類本身是個“假連接池”,其本質(zhì)只是使用HashMap結(jié)構(gòu)實現(xiàn)的數(shù)據(jù)庫連接對象緩存,其中存放的都是數(shù)據(jù)庫連接類Connection對象,而不是真正的應(yīng)用程序服務(wù)器數(shù)據(jù)庫連接池資源(例如WebSphere Server中定義的數(shù)據(jù)庫源)。</p><p> ConnectionPool對象不是在session中創(chuàng)建的,不是為每一個用戶都創(chuàng)建一
84、個。</p><p> ConnectionPool類用定時器管理這兩個數(shù)據(jù)庫連接池:定時器會定時(設(shè)置為5秒)檢查和關(guān)閉空閑JDBC數(shù)據(jù)庫連接的定時器。此定時器在創(chuàng)建ConnectionPool對象5秒后開始啟動此定時器。 每5秒鐘開始循環(huán)檢測。定時器的循環(huán)時間在程序中寫死了,如果要加快速度,必須修改代碼。檢測ConnectionPool主要包括兩個任務(wù):</p><p> 1)刪
85、除空閑隊列中的JDBC數(shù)據(jù)庫連接,管理空閑JDBC連接緩存。</p><p> 2)刪除使用隊列中死鎖的JDBC數(shù)據(jù)庫連接,管理正在使用的JDBC連接緩存。</p><p><b> 配置連接池參數(shù)</b></p><p> 本框架的優(yōu)點就在與大部分參數(shù)是可配置的,其中數(shù)據(jù)庫連接池參數(shù)也是可以配置的,當(dāng)然在程序中提供了默認的配置。即安裝
86、路徑下的build.properties文件,其參數(shù)含義如下所述:</p><p><b> 連接池的問題</b></p><p> 連接池類本身是個假連接池,只是使用HashMap結(jié)構(gòu)實現(xiàn)的數(shù)據(jù)庫連接對象緩存,其中存放的都是數(shù)據(jù)庫連接類Connection對象,而不是真正的應(yīng)用程序服務(wù)器數(shù)據(jù)庫連接池資源。而且,當(dāng)系統(tǒng)中數(shù)據(jù)庫連接對象超過設(shè)定值后,將不再創(chuàng)建新的連
87、接對象,而是拋出異常、或者處于等待狀態(tài)。因此,當(dāng)應(yīng)用程序沒有及時用free方法從HashMap中釋放資源、或者系統(tǒng)客戶端很多,導(dǎo)致數(shù)據(jù)庫連接超出設(shè)定值時,系統(tǒng)性能急劇下降,或者有的功能無法正常使用。</p><p> 因此,建議不要讓CRM系統(tǒng)框架管理應(yīng)用系統(tǒng)的數(shù)據(jù)庫連接,而是讓應(yīng)用程序服務(wù)器(例如Netweaver)來管理;不再使用ConnectionPool類,而是使用應(yīng)用程序服務(wù)器(例如Netweaver
88、)本身提供的數(shù)據(jù)庫連接池獲取數(shù)據(jù)庫連接對象。</p><p><b> 視圖</b></p><p><b> 視圖概述</b></p><p> 視圖是用戶看到并與之交互的界面。對老式的Web應(yīng)用程序來說,視圖就是由HTML元素組成的界面,在新式的Web應(yīng)用程序中,HTML依舊在視圖中扮演著重要的角色,但一些新的技
89、術(shù)已層出不窮,它們包括Adobe Flash和象XHTML,XML/XSL,WML等一些標(biāo)識語言和Web services. </p><p> 如何處理應(yīng)用程序的界面變得越來越有挑戰(zhàn)性。MVC一個大的好處是它能為你的應(yīng)用程序處理很多不同的視圖。在視圖中其實沒有真正的處理發(fā)生,不管這些數(shù)據(jù)是聯(lián)機存儲的還是一個雇員列表,作為視圖來講,它只是作為一種輸出數(shù)據(jù)并允許用戶操縱的方式。</p><p&
90、gt;<b> 視圖框架模型</b></p><p> 在Bosent Crm框架中支持三種Action和JSP的設(shè)計模式:</p><p> 模式1:各自獨立的Action和JSP</p><p> 模式2:復(fù)用JSP代碼,包括Form數(shù)據(jù)和JSP頁面</p><p> 模式3:復(fù)用Action</p&
91、gt;<p> 模式1:各自獨立的Action和JSP</p><p><b> 模式如下圖所示:</b></p><p> 一個Action對應(yīng)一個JSP頁面,即Action返回后僅僅轉(zhuǎn)向一個JSP。</p><p> 模式2:復(fù)用JSP代碼,包括Form數(shù)據(jù)和JSP頁面</p><p><
92、b> 模式如下圖所示:</b></p><p> 一個JSP頁面能響應(yīng)多個Action。模式2增強了模型1的可重復(fù)利用能力。</p><p> 模式3:復(fù)用Action</p><p> 一個Action能返回多個值,以對應(yīng)多個JSP頁面。而在這個Action中其實實現(xiàn)了多個Action功能。這種方法充分擴展了Action的功能。也是Bos
93、ent Crm平臺中最常使用的方式。</p><p><b> JSP模板</b></p><p> JSP模板文件提供一種標(biāo)準(zhǔn)的統(tǒng)一的頁面展示風(fēng)格,除了顯示的內(nèi)容不同外,頁面的整體框架都一致。使用JSP模板,大大減輕了頁面的編程工作,而一般web系統(tǒng)中,頁面的編程工作量占到全部工作量的70%。</p><p> 所有模板文件存放在\We
94、bContent\templates路徑下。</p><p> 基于布局的JSP頁面,頁面由下面幾個部分組成,Templates目錄下的JSP頁面:</p><p> template1bosent.jsp(標(biāo)準(zhǔn)layout布局)</p><p> template1nav.jsp(導(dǎo)航布局頁面)</p><p> 多數(shù)請求由導(dǎo)航布局
95、頁返回,對應(yīng)cfs-config.xml配置文件中forward配置項的layout="nav",例如:</p><p> <forward name="OK" resource="/accounts/accounts_orders_add.jsp" layout="nav"/> </p><
96、p><b> 菜單</b></p><p><b> 菜單類型</b></p><p> 在Bosent Crm系統(tǒng)中,菜單主要包括下面三種類型:</p><p> 顯示主模塊的頂層菜單(Top-level menu displaying modules)</p><p> 顯示每個
97、具體模塊的子菜單(Sub-menus for each module)</p><p> 標(biāo)簽樣式菜單(Tab-style container menus)</p><p> 而在平臺初始化過程中一共生成三種類型的菜單數(shù)據(jù):</p><p> 標(biāo)簽樣式(a tabbed version)</p><p> 圖形樣式(a graphic
98、 version)</p><p> 文本樣式(a text version)</p><p> 這些菜單數(shù)據(jù)存放在Request中,包括:</p><p><b> 菜單生成過程</b></p><p> 在ControllerServlet的初始化函數(shù)中,載入所有的菜單數(shù)據(jù)。</p><p
99、> ControllerServlet類從cfs-modules.xml配置文件獲得所有菜單的數(shù)據(jù),存放在主菜單鉤子類MainMenuHook的菜單屬性(類型是MainMenuItem)中。</p><p> 在ControllerServlet的forward函數(shù)中,根據(jù)用戶權(quán)限生成菜單 </p><p> 在ControllerServlet的service函數(shù)中,如果ac
100、tion對應(yīng)的forward中的“l(fā)ayout”屬性定義為“nav”,則調(diào)用MainMenuHook類的generateMenu方法,根據(jù)用戶權(quán)限生成HTML格式的主菜單和子菜單 </p><p> 和菜單相關(guān)的配置文件</p><p> 菜單配置文件(cfs-modules.xml)</p><p> 此配置文件用于確定主菜單和子菜單的顯示順序,以及每個菜單
101、項的權(quán)限信息。Action以URL的形式映射到菜單項。其他參數(shù)用來定義顯示在菜單項上的文字、定義權(quán)限標(biāo)識以及顯示在HTML頁面的標(biāo)題。</p><p> 例如下面的配置信息:</p><p> 系統(tǒng)配置文件(即build.properties)</p><p> 在安裝路徑下有系統(tǒng)配置文件(即build.properties),其中的“SYSTEM.LANGU
102、AGE”屬性應(yīng)該設(shè)置為“zh_CN”,即:SYSTEM.LANGUAGE=zh_CN,這樣設(shè)置菜單才能顯示為中文。即在SystemStatus對象中屬性Language才會設(shè)置為“zh_CN”。</p><p> 資源文件(dictionary_zh_CN.xml)</p><p> 存放系統(tǒng)共用的數(shù)據(jù)字典數(shù)據(jù)。</p><p> 語言資源文件位于web應(yīng)用的
103、\WEB-INF\languages目錄中,不同語種資源文件是一個由dictionary 加上語言代碼組成.xml文件,例如:dictionary_zh_CN.xm。</p><p> system.xml</p><p> 在安裝過程中,system.xml文件被復(fù)制到安裝路徑下的數(shù)據(jù)庫名稱文件夾中,即fileLibrary/[database name]/system.xml。&l
104、t;/p><p> 此文件包含安裝時的配置數(shù)據(jù),標(biāo)簽庫和模塊能訪問這些數(shù)據(jù)。例如開發(fā)一個action能訪問第三方的數(shù)據(jù)庫,那么可以把數(shù)據(jù)庫連接信息存放在此文件中,而不用在action類中寫死。此文件一般內(nèi)容如下所示:</p><p><b> 其中:</b></p><p> system.fields.ignore:用于定義可以動態(tài)忽略的J
105、SP模塊;</p><p> system.fields.label:用于定義JSP頁面中使用的可重命名的字符串標(biāo)識。</p><p><b> 菜單兩種配置</b></p><p> 在實際使用中,需要特別注意:system.xml和資源文件(dictionary_zh_CN.xml)可能同時對同一個數(shù)據(jù)字典進行了定義,例如system
106、.modules.label和system.container.menu.label在這兩個文件中都定義了相同的數(shù)據(jù)字典:</p><p> system.xml中定義了“system.modules.label”, 在資源文件dictionary_zh_CN.xml中同樣也定義有system.modules.label, 而system.xml和資源文件都同時存放在SystemStatus類中,只不過存放在
107、不同的對象中:system.xml存放在preferences對象中,資源文件存放在ApplicationPrefs對象的dictionaries對象中。</p><p> 因此SystemStatus類規(guī)定了優(yōu)先級,system.xml的優(yōu)先級大于資源文件。 如果要覆蓋資源文件中某菜單的標(biāo)識,可以在system.xml中覆蓋此標(biāo)識。但是此功能必須謹慎使用。在有的項目組中,出現(xiàn)的菜單中英文混雜問題,可能就是因為
108、這個原因造成的。</p><p><b> 標(biāo)簽庫</b></p><p> Bosent Crm平臺使用標(biāo)簽庫在頁面上按規(guī)則顯現(xiàn)信息。</p><p> Bosent Crm平臺使用的標(biāo)簽庫有:JSTL、dhv-taglib、zeroio-taglib。</p><p> 標(biāo)簽是SUN JSP的標(biāo)準(zhǔn)實現(xiàn),這里不
109、做介紹。</p><p><b> 本章小結(jié)</b></p><p> 在本章中,詳細闡述了Bosent Crm框架實現(xiàn)MVC設(shè)計模式的原理,包括模型、視圖、控制器編程規(guī)范實現(xiàn)原理等。</p><p> Bosent Crm平臺的功能改進</p><p> 在研究Bosent CRM 框架的基礎(chǔ)上,我對公司所使用
110、的CRM系統(tǒng)進行了相關(guān)的改進。</p><p><b> 權(quán)限體系改造</b></p><p><b> 功能需求</b></p><p> 現(xiàn)有系統(tǒng)中一個用戶只有一個角色,要求改造為一個用戶能擁有多個角色。</p><p><b> 改造基本思路</b></p&
111、gt;<p> 首先,改造基本的業(yè)務(wù)邏輯,將用戶和角色之間一對一的關(guān)系修改為一對多;修改完后需要檢驗一下是否能兼容處理一對一的關(guān)系;</p><p> 然后,修改頁面,能通過頁面配置用戶和角色之間一對多的關(guān)系;</p><p> 最后,測試系統(tǒng)和權(quán)限相關(guān)的模塊,檢查是否有遺留的地方。</p><p><b> 修改過程</b&g
112、t;</p><p><b> 創(chuàng)建用戶-角色表</b></p><p> 創(chuàng)建用戶-角色表,把用戶和角色一對一的關(guān)系轉(zhuǎn)換為一對多的關(guān)系,但是同時又要保證一對一的關(guān)系不變。</p><p> CREATE TABLE user_role (</p><p> user_id INTEGER NOT NULL
113、,</p><p> role_id INTEGER NOT NULL</p><p><b> );</b></p><p> 改造之后的表結(jié)構(gòu)之間的關(guān)系如下圖所示:</p><p><b> 修改業(yè)務(wù)邏輯 </b></p><p> CRM權(quán)限體系主要包括
114、和權(quán)限相關(guān)的業(yè)務(wù)邏輯和頁面。 </p><p> 角色類:org.aspcfs.modules.admin.base.Role:修改計算屬于某角色的用戶數(shù)函數(shù)buildUserCount。</p><p> 修改角色集合類:org.aspcfs.modules.admin.base.RoleList</p><p> 修改用戶類:org.aspcfs.modu
115、les.admin.base.User類 </p><p> 用戶集合類:org.aspcfs.modules.admin.base.UserList 類</p><p> 修改用戶權(quán)限列表類org.aspcfs.modules.admin.base.UserPermissionList </p><p> 修改SystemStatus全局數(shù)據(jù)類</p&
116、gt;<p> 即org.aspcfs.controller.SystemStatus類。修改權(quán)限校驗函數(shù)boolean hasPermission(int userId, String thisPermission)。這個函數(shù)很重要,是權(quán)限認證最核心的函數(shù)。</p><p><b> 修改用戶管理</b></p><p> 用戶列表,用戶的角色需
117、要能顯示多個。</p><p> 用戶詳細信息,角色需要能顯示多個。</p><p><b> 表單重復(fù)提交問題</b></p><p><b> 問題描述</b></p><p> Bonsent CRM平臺存在刷新引起的表單重復(fù)提交問題,即當(dāng)用戶提交完表單,進行頁面刷新操作,表單會重復(fù)
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設(shè)計(論文)基于mvc模式的web開發(fā)框架研究
- [優(yōu)秀畢業(yè)設(shè)計精品] 基于mvc模式的人力資源管理系統(tǒng)的設(shè)計與實現(xiàn)
- 基于MVC設(shè)計模式的Struts的研究與改進.pdf
- 基于MVC設(shè)計模式的系統(tǒng)框架研究與設(shè)計.pdf
- 基于MVC模式的STRUTS框架的研究與設(shè)計.pdf
- 畢業(yè)設(shè)計題目基于mvc框架的web開發(fā)技術(shù)
- 基于MVC設(shè)計模式的Struts框架的研究與應(yīng)用.pdf
- 基于MVC模式的框架設(shè)計與實例開發(fā).pdf
- 基于MVC模式的Struts框架的研究與實現(xiàn).pdf
- 基于MVC模式的Spring框架的應(yīng)用與研究.pdf
- 基于MVC模式的JavaWeb框架研究與應(yīng)用.pdf
- 基于MVC設(shè)計模式的Struts框架設(shè)計與應(yīng)用.pdf
- 基于MVC模式Web應(yīng)用框架的研究與應(yīng)用.pdf
- 基于MVC模式的AOP安全框架的研究與實現(xiàn).pdf
- 基于MVC模式的Web應(yīng)用框架的研究與開發(fā).pdf
- 基于MVC設(shè)計模式的WEB開發(fā)框架的研究及應(yīng)用.pdf
- 基于MVC模式輕量級框架SSH的研究與應(yīng)用.pdf
- 基于MVC模式的CORBA-Web框架的研究與應(yīng)用.pdf
- MVC設(shè)計模式下SSH組合框架的研究與設(shè)計.pdf
- 軟件工程畢業(yè)設(shè)計--基于mvc設(shè)計模式的加班管理系統(tǒng)
評論
0/150
提交評論