摘要:由于用戶對業(yè)務(wù)需求的不明確或者業(yè)務(wù)的變化,常常在開發(fā)甚至使用過程中要求增加數(shù)據(jù)庫字段,在前臺表現(xiàn)為需要變更表單。針對此種需求,提出基于Spring MVC和MyBatis,將字段設(shè)置為動態(tài)的,表單也動態(tài)生成,以滿足用戶業(yè)務(wù)變化的需求。
關(guān)鍵詞:動態(tài)字段;動態(tài)表單;Spring MVC;MyBatis
中圖分類號:TP393.09 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9599 (2012) 20-0000-02
1 引言
在實(shí)際的項(xiàng)目中,用戶常常在開發(fā)過程中,甚至上線后要求對表單和數(shù)據(jù)庫增加或減少一些字段,減少比較容易處理,增加字段則較為麻煩。如果和用戶業(yè)務(wù)有關(guān)的表字段能夠動態(tài)的處理,表單也能夠動態(tài)生成,那么用戶自己就可以對業(yè)務(wù)進(jìn)行維護(hù),無需開發(fā)人員介入。此種方式具有更好的可用性、靈活性、交互性,并且所設(shè)計(jì)的系統(tǒng)也具備更強(qiáng)的可移植性。
2 Spring MVC、Spring和MyBatis介紹
Spring是一個開源框架,其核心是IOC(控制反轉(zhuǎn))和AOP(面向切面編程),提供了Java EE開發(fā)各層的解決方案,同時,也提供了對其它框架的整合,發(fā)展到今天,Spring幾乎已經(jīng)成為Java EE 的代名詞。Spring MVC是Spring的一個用于構(gòu)建Web應(yīng)用的全功能MVC模塊,在進(jìn)入Spring MVC 3.0版本后,由于全注解方式的使用,相對于Strtus 2來說更為簡單易用,響應(yīng)速度在多個測試中也略勝一籌,并且和Spring天然集成。MyBatis是ibatis進(jìn)入3.0版本后改名而來,是一個優(yōu)秀的ORM框架,使用XML文件或者注解方式配置和原始映射,特點(diǎn)是提供了強(qiáng)大的動態(tài)SQL功能。相對于Hibernate而言,開發(fā)工作量會更大,也喪失了數(shù)據(jù)庫的移植性,但提供了更大的靈活性和性能的可控性。
3 數(shù)據(jù)存儲方式
圖1是動態(tài)表單的數(shù)據(jù)表設(shè)計(jì),其中,模板表存儲的是表單的名稱,表示是哪個數(shù)據(jù)表單。數(shù)據(jù)項(xiàng)表存儲的是表單的數(shù)據(jù)項(xiàng),數(shù)據(jù)項(xiàng)類型字段存儲int類型,主要分為以下幾項(xiàng):
(1)取值1為文本:單文本數(shù)據(jù)項(xiàng),在前臺顯示為文本框,此時參數(shù)1為長度,參數(shù)2為正則表達(dá)式規(guī)則。
(2)取值2為整數(shù):在前臺顯示為文本框,此時參數(shù)1為最大值,參數(shù)2為最小值。
(3)取值3為小數(shù):在前臺顯示為文本框,此時參數(shù)1為最大值,參數(shù)2為最小值。
(4)取值4為日期:在前臺顯示為日期選擇框,此時參數(shù)1為輸入格式,如“yyyy-MM-dd”,參數(shù)2為輸出顯示的格式,如“yyyy年MM月dd日”。
(5)取值5為多行文本:在前臺顯示為多行文本框,此時參數(shù)1為文本最大長度。
(6)取值6為列表:在前臺顯示為下拉選擇框,此時參數(shù)1為列表值,用特定分隔符隔開,如“男,女”。
是否必填字段表示是否允許該字段為空,是否列表字段表示該字段在是否出現(xiàn)在分頁查詢列表中,是否檢索字段表示該字段是否在分頁查詢頁面作為查詢條件出現(xiàn)。
數(shù)據(jù)項(xiàng)值表用于存儲數(shù)據(jù)項(xiàng)的值,存儲方式不再是傳統(tǒng)的橫表,而是豎表,每一條記錄存儲一條記錄里一個字段的值,記錄編號相當(dāng)于是傳統(tǒng)存儲方式的主鍵,用于將多個值關(guān)聯(lián)成一條傳統(tǒng)意義上的記錄。豎表的存儲方式值字段均為字符串型,需要開發(fā)者編寫代碼將字符串類型轉(zhuǎn)換為其它數(shù)據(jù)類型。在查詢記錄時,將豎表轉(zhuǎn)換為橫表顯示的sql代碼寫在MyBatis的配置文件中,因?yàn)樽侄尾还潭ǎ琈yBatis不將動態(tài)表單查詢到的內(nèi)容映射為實(shí)體,而是映射為Map。
在系統(tǒng)中,必須先定義模板,再定義模板所包含的數(shù)據(jù)項(xiàng),在定義數(shù)據(jù)項(xiàng)時,必須將數(shù)據(jù)項(xiàng)的名稱、類型及對應(yīng)的參數(shù)1和參數(shù)2定義好。刪除數(shù)據(jù)項(xiàng)時,并不在數(shù)據(jù)庫中真的刪除,而是將狀態(tài)置為0。
4 動態(tài)表單的生成
在spring mvc中,通過調(diào)用service層和dao層,查詢到表單所需要的數(shù)據(jù)項(xiàng),放入list中,跳轉(zhuǎn)到j(luò)sp頁面,使用jstl的
${field.showname}:
<!--整數(shù)輸入框,參數(shù)1,參數(shù)2,省略具體-->
<!--其余省略-->
在表單提交時,onsubmit事件中,添加javascript的表單驗(yàn)證方法,使用jquery根據(jù)input標(biāo)簽的class元素進(jìn)行選擇,為每種類型的數(shù)據(jù)項(xiàng)使用不同的表單驗(yàn)證。并通過input標(biāo)簽添加的allowedEmpty、parameter1、parameter2元素的值,來判斷是否允許該表單為空,及最大、最小值,正則表單式等信息。
5 小結(jié)
本文描述了一種動態(tài)表單的設(shè)計(jì),表單的數(shù)據(jù)項(xiàng)動態(tài)添加,表單根據(jù)數(shù)據(jù)庫的字段動態(tài)生成,并且能夠設(shè)置數(shù)據(jù)項(xiàng)的一些javascript驗(yàn)證方法,通過客戶端進(jìn)行數(shù)據(jù)有效性的驗(yàn)證。解決了系統(tǒng)開發(fā)和使用過程中,因?yàn)闃I(yè)務(wù)變化的需要,對表單字段進(jìn)行修改的問題。
參考文獻(xiàn):
[1]張佳強(qiáng),王士同.信息管理系統(tǒng)動態(tài)表單技術(shù)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2010(8).
[2]宋少忠,歐陽濤,趙浩宇.動態(tài)數(shù)據(jù)庫功能在B/S結(jié)構(gòu)程序設(shè)計(jì)中的實(shí)現(xiàn)[J].吉林大學(xué)學(xué),2011(1).
[作者簡介]
夏汛(1984-),男,四川瀘州人,在讀碩士。主要研究方向:軟件開發(fā)技術(shù)、網(wǎng)絡(luò)安全。陳玲(1983-),女,江西撫州人,碩士。主要研究方向:軟件開發(fā)技術(shù)、富客戶端技術(shù)。