下面的類(lèi)計(jì)算并緩存了一個(gè)總和,并且在另一個(gè)類(lèi)中打印這個(gè)總和
class Cache{
static {
initializeIfNecessary();
}
private static int sum;
public static int getSum(){
initializeIfNecessary();
return sum;
}
private static boolean initialized = false;
private static synchronized void initializeIfNecessary(){
if(!initialized){
for(int i=0; i < 100; i++ )
sum+=i;
initialized = true;
}
}
}
pubic class Client {
pubilc static void main(String[] args){
System.out.println(Cache.getSum());
}
}
程序是一個(gè)典型的半開(kāi)循環(huán),應(yīng)該打印出1到99的整數(shù)總和,即4950,但程序運(yùn)行打印的為9900,是預(yù)期值的兩倍。
程序在確保sum在使用之前就已經(jīng)初始化這個(gè)問(wèn)題上,遇到了麻煩。程序結(jié)合了惰性初始化和積極初始化,還使用上了同步,以確保緩存在多線程環(huán)境下也能工作,但程序無(wú)法完成預(yù)期的工作。
程序輸出打印是控制標(biāo)志initialized 的問(wèn)題。qq上一個(gè)朋友問(wèn)的一本書(shū)里的問(wèn)題,我也找到那本書(shū)了,是惰性初始化(static初始化)的問(wèn)題,控制標(biāo)志在static完成初始化后又重新被構(gòu)造器賦值為false,初始化總和值的方法被執(zhí)行了兩次。
大概一年以前參與到一個(gè)大型信息管理軟件系統(tǒng)的維護(hù)工作中,這個(gè)系統(tǒng)是B/S結(jié)構(gòu),主要負(fù)責(zé)某省煤炭資源運(yùn)銷(xiāo)管理,應(yīng)用在了鐵路這個(gè)渠道管理上,我們的主要的系統(tǒng)維護(hù)工作重心在鐵路管理維護(hù)上,另外還負(fù)責(zé)一些網(wǎng)站信息發(fā)布管理功能的維護(hù)。這個(gè)管理系統(tǒng)有自己的一套網(wǎng)絡(luò)體系,因?yàn)槲也](méi)有參與其中的網(wǎng)絡(luò)體系的搭建與后期的維護(hù)工作,只是大概的了解一些:
1.網(wǎng)絡(luò)體系的結(jié)構(gòu)為樹(shù)狀拓?fù)浣Y(jié)構(gòu),主要依據(jù)該公司的組織機(jī)構(gòu)建立,該公司組織機(jī)構(gòu)分為總公司一級(jí),分公司一級(jí),縣級(jí)公司一級(jí)以及直接負(fù)責(zé)煤炭運(yùn)銷(xiāo)具體的工作的公司一級(jí)。網(wǎng)絡(luò)體系以此而建,也分為四級(jí)網(wǎng)絡(luò)。
2.使用一套c/s體系的軟件,完成基礎(chǔ)數(shù)據(jù)的收集,并定時(shí)上報(bào)到縣級(jí)公司或者直屬的分公司,然后將數(shù)據(jù)匯總分析后通過(guò)這套軟件提交,統(tǒng)一儲(chǔ)存到總公司數(shù)據(jù)庫(kù)服務(wù)器。
3.根據(jù)該行業(yè)的業(yè)務(wù),每年全省的煤炭運(yùn)量,特別是通過(guò)鐵路渠道的運(yùn)量,在年初通過(guò)簽訂的全年合同決定,該年的業(yè)務(wù)也以此運(yùn)量為準(zhǔn)。
這套軟件成型與2002年,在當(dāng)時(shí)的條件限制下這是一套最為有效的軟件工作體系了,但也有其缺陷:
1. 盡管基礎(chǔ)數(shù)據(jù)收集大都已經(jīng)為通過(guò)電子稱(chēng)量系統(tǒng)實(shí)現(xiàn)自動(dòng)數(shù)據(jù)提取,但在上報(bào)過(guò)程中,仍有可能對(duì)數(shù)據(jù)進(jìn)行篡改,軟件為此專(zhuān)門(mén)增設(shè)了一個(gè)子功能系統(tǒng),但使用情況不容樂(lè)觀,收效甚微。
2. 數(shù)據(jù)統(tǒng)一存儲(chǔ)在總公司數(shù)據(jù)庫(kù)服務(wù)器中,方便管理,在最初的設(shè)計(jì)中,數(shù)據(jù)庫(kù)沒(méi)有設(shè)計(jì)負(fù)載分流以及鏡像備份的等處理,隨著系統(tǒng)的使用,數(shù)據(jù)量的增加,數(shù)據(jù)庫(kù)負(fù)載增大,軟件反應(yīng)速度越來(lái)越慢。
這個(gè)缺陷在今年年初運(yùn)量提報(bào)和每個(gè)月初的各個(gè)分公司的運(yùn)量提報(bào)中尤為明顯,數(shù)據(jù)庫(kù)出現(xiàn)多次當(dāng)機(jī)情況,處理過(guò)多次,但收效不明顯,在使用高峰期需要注意數(shù)據(jù)庫(kù)的使用情況。
這個(gè)系統(tǒng)的網(wǎng)絡(luò)部分就寫(xiě)這么多吧,畢竟不太熟悉,還是摻雜了軟件的非網(wǎng)絡(luò)部分,:-)。下一篇開(kāi)始寫(xiě)這個(gè)軟件的web架構(gòu)部分,主要是mvc框架和dao框架部分。
The Architect (dedicated non-programming technical decision maker and problem solver for business): 架構(gòu)師(專(zhuān)用非編程技術(shù)決策者,業(yè)務(wù)問(wèn)題解決者)
|
完成該系統(tǒng)后,所完成的后期維護(hù)工作中,最大的以部分就是數(shù)據(jù)統(tǒng)計(jì)查詢(xún)分析功能的完善了。 系統(tǒng)軟件框架提供了一套報(bào)表生成系統(tǒng)來(lái)完成數(shù)據(jù)統(tǒng)計(jì)查詢(xún)的功能。這條報(bào)表生成系統(tǒng)可以生成excel和pdf兩種格式的統(tǒng)計(jì)報(bào)表。 這個(gè)系統(tǒng)使用報(bào)表的流程大致為: 1.每個(gè)功能都提供一系列的報(bào)表,在軟件中這些報(bào)表以二維字符串?dāng)?shù)組的數(shù)據(jù)格式保存,每個(gè)字符串?dāng)?shù)組對(duì)象包括該報(bào)表的唯一鍵值,報(bào)表名稱(chēng),報(bào)表?xiàng)l件提供頁(yè)面以及生成該報(bào)表的具體的Java類(lèi)。 2.選擇需要生成的報(bào)表,系統(tǒng)將該報(bào)表的唯一鍵值傳入統(tǒng)一的報(bào)表控制類(lèi),首先是跳轉(zhuǎn)到生成該報(bào)表的條件頁(yè)面,按照功能劃分報(bào)表的主要原因就是每個(gè)功能的報(bào)表?xiàng)l件一致,可以使用統(tǒng)一的控制類(lèi)。 3.提交條件后,統(tǒng)一的報(bào)表控制類(lèi)會(huì)調(diào)用該報(bào)表的生成類(lèi),這些類(lèi)需要繼承統(tǒng)一的接口,提供了一個(gè)統(tǒng)一的方法,返回?cái)?shù)據(jù)類(lèi)型為Vector集合的對(duì)象,這個(gè)Vector對(duì)象容器數(shù)據(jù)對(duì)象要求為: 兩個(gè)Vector對(duì)象,一個(gè)為表頭Vector,一個(gè)為表體Vector,這兩個(gè)Vector對(duì)象中存儲(chǔ)的數(shù)據(jù)為字符串?dāng)?shù)組對(duì)象。 在具體應(yīng)用中,只要將數(shù)據(jù)填充到字符串?dāng)?shù)組中,再依次放入Vector中,報(bào)表框架會(huì)生成報(bào)表。 這個(gè)框架的一個(gè)確定就是只能接受字符串?dāng)?shù)組對(duì)象,如果生成excel格式的報(bào)表,無(wú)法根據(jù)生成的報(bào)表進(jìn)行計(jì)算,必須手動(dòng)的將數(shù)據(jù)調(diào)整為數(shù)字型。
|
大家喝的是啤酒,這時(shí)你入座了,給自己倒了杯可樂(lè),這叫低配置;給自己倒了杯啤酒,這叫標(biāo)準(zhǔn)配置;給自己倒了杯茶水,這茶的顏色還跟啤酒一樣,這叫木馬;給自己倒了杯可樂(lè),還滴了幾滴醋,不僅顏色跟啤酒一樣,不冒熱氣還有泡泡,這叫超級(jí)木馬;你同事給你到了杯白酒,這叫推薦配置。
人到齊了,酒席開(kāi)始了。你現(xiàn)一個(gè)人喝了一小口,這叫單元測(cè)試;你跟旁邊的人說(shuō)哥們?cè)蹅冸S意,這叫交叉測(cè)試;但是他說(shuō)不行,這杯要干了,這叫壓力測(cè)試;于是你說(shuō)那就大家一起來(lái)吧,這叫內(nèi)部測(cè)試;這時(shí)候boss向全場(chǎng)舉杯,這叫公開(kāi)測(cè)試。 菜過(guò)三巡,你就不跟他們客氣了,你向?qū)γ娴娜司淳?,這叫p2p;他回敬你,你又再敬他,這叫TCP;你向一桌人挨個(gè)敬酒,這叫令牌環(huán);你說(shuō)只要是兄弟就干了這杯,這叫廣播。 有一個(gè)人過(guò)來(lái)向這卓敬酒,你說(shuō)不行,你先過(guò)了我這關(guān),這叫防火墻。你的小弟們過(guò)來(lái)敬你酒,這叫一對(duì)多。 酒過(guò)三巡后,你也該活動(dòng)活動(dòng)了,你一桌一桌的走,這叫輪詢(xún);你突然看見(jiàn)某一桌的漂亮mm,走了過(guò)去,這叫優(yōu)先級(jí);你去了坐下來(lái)就不打算走了,這叫死循環(huán);你的老大舉杯邀你過(guò)去,你只好走過(guò)去,這叫激活事件。 你向一桌敬酒,他們說(shuō):“不行,不行,我們都喝白的。”于是你也喝白的。這叫本地化;你向boss敬酒,可是boss被圍起來(lái),你只能站在外圍,這叫排隊(duì);你終于到了內(nèi)圍,小心翼翼的向前一步,這叫訪問(wèn)臨界區(qū);你拍照boss的肩膀說(shuō)哥們?cè)蹅冊(cè)俸纫驯?,這叫越界。 |
一個(gè)程序員對(duì)自己的未來(lái)很迷茫,于是去問(wèn)上帝:“萬(wàn)能的上帝啊,請(qǐng)你告訴我,我的未來(lái)會(huì)怎樣?” 上帝說(shuō):“我的孩子,你去問(wèn)Lippman,他現(xiàn)在領(lǐng)導(dǎo)的程序員的隊(duì)伍可能是地球上最大的。” 于是他去問(wèn)Lippman,Lippman說(shuō):“程序員的未來(lái)就是駕馭程序員。” 這個(gè)程序員對(duì)這個(gè)未來(lái)不滿(mǎn)意,于是他又去問(wèn)上帝:“萬(wàn)能的上帝呀,請(qǐng)你告訴我,我的未來(lái)會(huì)怎樣?” 上帝說(shuō):我的孩子,你去問(wèn)Gates,他現(xiàn)在所擁有的財(cái)產(chǎn)可能是地球上最多的。” 于是他去問(wèn)Gates,Gates說(shuō):“程序員的未來(lái)就是榨取程序員。” 這個(gè)程序員對(duì)這個(gè)未來(lái)不滿(mǎn)意,于是他又去問(wèn)上帝:“萬(wàn)能的上帝啊,請(qǐng)你告訴我,我的未來(lái)會(huì)怎樣?” 上帝說(shuō):“我的孩子,你去問(wèn)侯捷,他寫(xiě)的計(jì)算機(jī)書(shū)的讀者可能是地球上最多的。” 于是他去問(wèn)侯捷。 侯捷說(shuō):“程序員的未來(lái)就是誘惑程序員。” 這個(gè)程序員對(duì)這個(gè)未來(lái)不滿(mǎn)意,于是又去問(wèn)上帝:“萬(wàn)能的上帝啊,請(qǐng)你告訴我,我的未來(lái)會(huì)怎樣?” 上帝搖搖頭:“唉,我的孩子,你還是別當(dāng)程序員了。” |
該系統(tǒng)軟件框架對(duì)sql操作進(jìn)行了封裝,并提供了一批API幫助客戶(hù)程序員更為簡(jiǎn)便的進(jìn)行數(shù)據(jù)庫(kù)操作。這些api包括:
這個(gè)數(shù)據(jù)庫(kù)框架還提供了一些方便編寫(xiě)代碼的操作,例如拼裝sql語(yǔ)句,提供了一個(gè)這樣的方法:MakeUp類(lèi)。代碼如下: java 代碼
這個(gè)makeUp方法會(huì)將sql語(yǔ)句拼裝好,@表示數(shù)字占位,#表示字符占位。 這個(gè)系統(tǒng)的數(shù)據(jù)庫(kù)操作管理大致就是這樣了,比較簡(jiǎn)單,總的來(lái)說(shuō)就是對(duì)dbconncetion 操作進(jìn)行了重新封裝,方便客戶(hù)程序員的使用。
|
維護(hù)的這個(gè)軟件系統(tǒng)使用了一個(gè)比較復(fù)雜的系統(tǒng)權(quán)限管理系統(tǒng),原本的設(shè)計(jì)是將用戶(hù)對(duì)軟件的使用權(quán)限控制到以最末級(jí)的菜單,并根據(jù)公司組織機(jī)構(gòu)的設(shè)計(jì),上級(jí)組織單位可以將自身所獲得的權(quán)限繼續(xù)授權(quán)到自己的下級(jí)公司。
為了授權(quán)權(quán)限的操作簡(jiǎn)單話(huà),不然每次都從幾百個(gè)菜單選項(xiàng)中選擇給該用戶(hù)授權(quán)的菜單權(quán)限,恐怕這個(gè)權(quán)限系統(tǒng)管理員就要崩潰了。:-),權(quán)限管理系統(tǒng)將權(quán)限分為了權(quán)限組,權(quán)限域,基本權(quán)限管理。 權(quán)限組和權(quán)限域的區(qū)別我至今沒(méi)有太分的清楚,郁悶中····在不多的使用當(dāng)中(主要是設(shè)置測(cè)試用戶(hù)的權(quán)限)感覺(jué)上這兩種權(quán)限范圍設(shè)置是評(píng)級(jí)的,沒(méi)有誰(shuí)是誰(shuí)的上級(jí)的關(guān)系,不清楚當(dāng)初為什么設(shè)置成這樣,我用的主要是權(quán)限域的設(shè)置。 給用戶(hù)授權(quán)下權(quán)限,前提是已經(jīng)有相應(yīng)的權(quán)限域設(shè)置。 1.權(quán)限域設(shè)置:權(quán)限域需要相應(yīng)的設(shè)置編碼,并選擇該權(quán)限域包括的菜單權(quán)限。 2.在設(shè)置好權(quán)限域后,就可以直接將該權(quán)限域授權(quán)到系統(tǒng)用戶(hù)。 權(quán)限管理使用了數(shù)據(jù)庫(kù)信息管理,現(xiàn)在使用起來(lái)比較笨拙,不過(guò)由于最初的設(shè)置過(guò)于復(fù)雜,如果使用現(xiàn)在比較統(tǒng)一的xml文件配置,可能使用起來(lái)也不是很方便。 每個(gè)菜單權(quán)限項(xiàng)都有一個(gè)自身的權(quán)限編碼,該系統(tǒng)的菜單全部分為三級(jí),編碼規(guī)范為:一級(jí)菜單編碼_二級(jí)菜單編碼_三級(jí)菜單編碼。這樣,在授權(quán)權(quán)限的時(shí)候可以直接將一級(jí)菜單授權(quán),用戶(hù)相應(yīng)的也獲得該一級(jí)菜單下所有功能的使用權(quán)。 用戶(hù)登錄成功后系統(tǒng)會(huì)將該用戶(hù)的合法權(quán)限值壓到一個(gè)集合中,放到sessin對(duì)象里。 權(quán)限的控制在系統(tǒng)的頁(yè)面和后臺(tái)控制類(lèi)都有實(shí)現(xiàn)。頁(yè)面使用了上一篇提到的頁(yè)面邏輯標(biāo)簽實(shí)現(xiàn)控制,在顯示該頁(yè)面之前,控制類(lèi)使用了個(gè)系統(tǒng)框架提供的公共權(quán)限控制類(lèi)將該用戶(hù)的權(quán)限值壓到頁(yè)面值中。 在調(diào)用該功能之前,控制類(lèi)現(xiàn)會(huì)判斷該用戶(hù)的權(quán)限,有一個(gè)通用類(lèi),將該功能的權(quán)限和當(dāng)前的用戶(hù)對(duì)象作為參數(shù)傳入,該類(lèi)會(huì)判斷在用戶(hù)的權(quán)限集合中是否包括該權(quán)限,以決定是否繼續(xù)執(zhí)行該功能流程。 這個(gè)系統(tǒng)的權(quán)限管理部分就是這么多了,下一篇講講這個(gè)系統(tǒng)的數(shù)據(jù)庫(kù)管理部分。維護(hù)的這個(gè)軟件系統(tǒng)使用了一個(gè)比較復(fù)雜的系統(tǒng)權(quán)限管理系統(tǒng),原本的設(shè)計(jì)是將用戶(hù)對(duì)軟件的使用權(quán)限控制到以最末級(jí)的菜單,并根據(jù)公司組織機(jī)構(gòu)的設(shè)計(jì),上級(jí)組織單位可以將自身所獲得的權(quán)限繼續(xù)授權(quán)到自己的下級(jí)公司。 為了授權(quán)權(quán)限的操作簡(jiǎn)單話(huà),不然每次都從幾百個(gè)菜單選項(xiàng)中選擇給該用戶(hù)授權(quán)的菜單權(quán)限,恐怕這個(gè)權(quán)限系統(tǒng)管理員就要崩潰了。:-),權(quán)限管理系統(tǒng)將權(quán)限分為了權(quán)限組,權(quán)限域,基本權(quán)限管理。 權(quán)限組和權(quán)限域的區(qū)別我至今沒(méi)有太分的清楚,郁悶中····在不多的使用當(dāng)中(主要是設(shè)置測(cè)試用戶(hù)的權(quán)限)感覺(jué)上這兩種權(quán)限范圍設(shè)置是評(píng)級(jí)的,沒(méi)有誰(shuí)是誰(shuí)的上級(jí)的關(guān)系,不清楚當(dāng)初為什么設(shè)置成這樣,我用的主要是權(quán)限域的設(shè)置。 給用戶(hù)授權(quán)下權(quán)限,前提是已經(jīng)有相應(yīng)的權(quán)限域設(shè)置。 1.權(quán)限域設(shè)置:權(quán)限域需要相應(yīng)的設(shè)置編碼,并選擇該權(quán)限域包括的菜單權(quán)限。 2.在設(shè)置好權(quán)限域后,就可以直接將該權(quán)限域授權(quán)到系統(tǒng)用戶(hù)。 權(quán)限管理使用了數(shù)據(jù)庫(kù)信息管理,現(xiàn)在使用起來(lái)比較笨拙,不過(guò)由于最初的設(shè)置過(guò)于復(fù)雜,如果使用現(xiàn)在比較統(tǒng)一的xml文件配置,可能使用起來(lái)也不是很方便。 每個(gè)菜單權(quán)限項(xiàng)都有一個(gè)自身的權(quán)限編碼,該系統(tǒng)的菜單全部分為三級(jí),編碼規(guī)范為:一級(jí)菜單編碼_二級(jí)菜單編碼_三級(jí)菜單編碼。這樣,在授權(quán)權(quán)限的時(shí)候可以直接將一級(jí)菜單授權(quán),用戶(hù)相應(yīng)的也獲得該一級(jí)菜單下所有功能的使用權(quán)。 用戶(hù)登錄成功后系統(tǒng)會(huì)將該用戶(hù)的合法權(quán)限值壓到一個(gè)集合中,放到sessin對(duì)象里。 權(quán)限的控制在系統(tǒng)的頁(yè)面和后臺(tái)控制類(lèi)都有實(shí)現(xiàn)。頁(yè)面使用了上一篇提到的頁(yè)面邏輯標(biāo)簽實(shí)現(xiàn)控制,在顯示該頁(yè)面之前,控制類(lèi)使用了個(gè)系統(tǒng)框架提供的公共權(quán)限控制類(lèi)將該用戶(hù)的權(quán)限值壓到頁(yè)面值中。 在調(diào)用該功能之前,控制類(lèi)現(xiàn)會(huì)判斷該用戶(hù)的權(quán)限,有一個(gè)通用類(lèi),將該功能的權(quán)限和當(dāng)前的用戶(hù)對(duì)象作為參數(shù)傳入,該類(lèi)會(huì)判斷在用戶(hù)的權(quán)限集合中是否包括該權(quán)限,以決定是否繼續(xù)執(zhí)行該功能流程。 這個(gè)系統(tǒng)的權(quán)限管理部分就是這么多了,下一篇講講這個(gè)系統(tǒng)的數(shù)據(jù)庫(kù)管理部分。 |
這個(gè)軟件架構(gòu)使用的mvc架構(gòu)包括使用自身一套頁(yè)面邏輯,標(biāo)簽類(lèi)型比較簡(jiǎn)單,包括邏輯判斷標(biāo)簽、頁(yè)面賦值標(biāo)簽和循環(huán)list對(duì)象取值標(biāo)簽。
在執(zhí)行完頁(yè)面請(qǐng)求返回的頁(yè)面沒(méi)有規(guī)定,可以是jsp,也可以是html頁(yè)面,使用上一篇提到的Common對(duì)象跳轉(zhuǎn)頁(yè)面,方法為:common.showPage("page")方法,因?yàn)闆](méi)有該框架的這部分源代碼,只能大概推測(cè),這個(gè)方法是讀入頁(yè)面,并將執(zhí)行頁(yè)面含有的邏輯標(biāo)簽和賦值,一個(gè)方法可以多次使用該方法,最后的執(zhí)行結(jié)果是多個(gè)頁(yè)面順次顯示,比如: ![]() ![]() ![]() ![]() ![]() page1的頁(yè)面代碼: ![]() ![]() ![]() ![]() ![]()
page2的頁(yè)面代碼:
![]() ![]() ![]() ![]() ![]()
最后顯示的頁(yè)面代碼:
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 頁(yè)面的邏輯標(biāo)簽很簡(jiǎn)單:<if><else><endif>,完成簡(jiǎn)單的頁(yè)面邏輯判斷 在頁(yè)面最終生成之前執(zhí)行的代碼,common的showpage方法會(huì)將標(biāo)簽作為java代碼執(zhí)行。 頁(yè)面賦值標(biāo)簽寫(xiě)法很簡(jiǎn)單:($value$),value為要獲取的參數(shù)值,使用$符號(hào)區(qū)隔,可以和邏輯標(biāo)簽混合使用: <if ($value$)==1>1<else>2<endif> 寫(xiě)法有些類(lèi)似現(xiàn)在流行的mvc開(kāi)源框架。 另一個(gè)常用的循環(huán)標(biāo)簽:<loop ($list$) ></loop> list為循環(huán)的集合對(duì)象。也可以同時(shí)循環(huán)多個(gè)list集合對(duì)象,但前提是多個(gè)對(duì)象的集合大小相同,不然就會(huì)出現(xiàn)數(shù)組溢出的錯(cuò)誤。 該mvc框架配合了一套js腳本庫(kù)一同使用,因此像一些常用的腳本方法就和mvc框架的一些特點(diǎn)結(jié)合起來(lái)使用,js代碼編寫(xiě)量減少。 表單提交參數(shù)驗(yàn)證有一套統(tǒng)一的方法,現(xiàn)在應(yīng)該應(yīng)用的很普遍了。在表單對(duì)象標(biāo)簽里增加一些屬性,最后提交表單是調(diào)用統(tǒng)一表單驗(yàn)證方法,該方法會(huì)讀取該對(duì)象的屬性,判斷該對(duì)象值是否符合要求,包括判斷復(fù)選框?qū)ο笫欠裼羞x擇對(duì)象,例如在刪除列表中的多個(gè)對(duì)象使用。 在常用的查詢(xún)列表和該列表的某個(gè)具體對(duì)象時(shí),腳本庫(kù)提供了統(tǒng)一的方法: 1、常用的翻頁(yè)方法,首頁(yè),尾頁(yè),上一頁(yè),下一頁(yè),跳轉(zhuǎn)到某一頁(yè)的方法,只需要使用腳本庫(kù)中統(tǒng)一的方法,傳入表單名稱(chēng)參數(shù),class名稱(chēng),method名稱(chēng),跳轉(zhuǎn)到某一頁(yè)需要再傳入頁(yè)面參數(shù)即可,不需在編寫(xiě)js代碼。 2. 查看某一條具體記錄,方法類(lèi)似于翻頁(yè)方法,同樣傳入表單名稱(chēng)參數(shù),class名稱(chēng),method名稱(chēng)表單名稱(chēng)參數(shù),class名稱(chēng),method名稱(chēng),和該條記錄的主鍵值。 今天寫(xiě)到這里,下一篇寫(xiě)寫(xiě)這個(gè)系統(tǒng)的權(quán)限系統(tǒng)。 |