隨筆-55  評論-72  文章-2  trackbacks-0

                  這篇文章,在草稿箱里沉積了好久,一直說要把它寫完,可老是被其他事情給占用。我現(xiàn)在的休息時間就是漫天涂鴉,已經(jīng)好久沒去整理wmframework了,感覺自己都有點對它陌生了。今天發(fā)現(xiàn)剛好草稿箱里就剩下這個,那就把它寫完吧。

              這里我主要介紹wmframework1.0版本關于jsp請求數(shù)據(jù)處理,這個版本被運用在我做一個校務管理系統(tǒng)的時候,大體的處理流程和(一)中介紹那樣,有興趣可以回頭看看。wmframework v1.0整個版本的完善經(jīng)歷了2年半左右的時間。當然這更多得益于項目組最終確定采用這個技術框架,有了更多的人使用,自然暴露的問題就逐漸增多。為了滿足通用與靈活多樣的特性,解決了各種自己原先沒考慮的需求,這中間我做了很多大大小小的修改完善。整個項目結束,最終1.0版本已就穩(wěn)定下來了。

              我先說下wmframework 提倡什么,它主要倡導的就是開發(fā)的分層性,這個你可以在我的《用WM framework進行MVC團隊組合模式的系統(tǒng)開發(fā)》找到答案。就單個模塊或功能點的開發(fā)而言,wmframework提出,多個jsp頁面請求公用一個action相應,一個service外部接口和一個dao完成處理,所以使用wmframework,常規(guī)下開發(fā)人員沒必要也不允許進行actionservicedao的編寫,因為wmframework自帶的公用定義已經(jīng)完成了你的操作。不說別的光這點上就可以節(jié)省多少不必要的資源開銷,最終可以直接有效地降低開發(fā)人員的工作量,何樂而不為呢?

              wmframework 主要是依托于ajax數(shù)據(jù)提交模式下運作的,在1.0中主要是以同步請求提交為主,下面我具體來說說前后臺jsp請求數(shù)據(jù)處理。

          1.前臺數(shù)據(jù)封裝

              使用wmframework 要求開發(fā)人員在jsp中除了使用html標簽,部分jstl及自定義標簽外,一般不提倡使用類似strutsspring自帶的mvc標簽,因為這些標簽本身就是一個javabean,如果用的過多,那必然增加jsp的頁面負載和請求加載速度,如直接使用html標簽,至少可以減少那些mvc標簽的解析過程。下面我給出一個jsp中一個表單元素的寫法:

          <input type="text"  issave="true" fieldname="userAccount" require="true" datatype="chars"
          showmessage
          ="用戶賬號為空或設置錯誤" maxlength="20" class="textfile" id='unit_account'/>

           

              這里wmframework 擴展了html標簽,增加了幾個自定義的屬性。issave="true"表明當前表單元素是必須提交到后臺進行操作的;fieldname是匹配當前表單提交匹配domain(或pojo)的中某個屬性的名稱;require表明當前字段是否必填;datatype標識當前元素需要填入的數(shù)據(jù)類型,這里chars代表需要字符型;showmessage表示如當前表單元素校驗不通過;需要給出的提示信息。當然不光是input可以這樣定義,只要html支持的頁面標簽如select,textarea,image,div,tr,td等等都可以進行這些屬性的定義,這里就不一一羅列了。

          2.前臺數(shù)據(jù)校驗

              頁面元素定義完,接下來就是表單提交數(shù)據(jù)前,前臺js校驗問題了,這里wmframework 通過自定義的js對象WMvalidate完成,一般情況下不提倡直接調用WMvalidate中的方法,因為WMvalidate在被調用完成數(shù)據(jù)校驗的同時,其他對象在完成這些表單數(shù)據(jù)的裝載。

          3.前臺數(shù)據(jù)提交

              對于當前jsp表單數(shù)據(jù)的校驗與裝載過程,主要在前臺js的入口對象WMaction中完成,所以一般頁面中主要以調用WMaction為主。下面我給出jsp調用WMaction對象的一個實例,進行簡單說明:

          這是一個提交按鈕觸發(fā)的onclick事件處理函數(shù)

          function dosave() {
            
          var ac = new action();//創(chuàng)建js對象請求action對象

            ac.setForm(document.forms[0]);//設置本次提交表單數(shù)據(jù)所處的form對象,當一個頁面存在太多元素或form是,可以有效地減少沒必要的頁面元素遍列
            ac.setUrl(cps+'/userAction.do?action=add');//設置本次提交的路徑url, cps為公共文件中定義的全局變量,var cps = "<%=request.getContextPath()%>";即當前上下文的js引用。
            ac.setTextDiv('textdiv');//設置本次提交,需要隱藏按鈕所在的div的ID值。數(shù)據(jù)提交后,當前操作按鈕將被隱藏,避免用戶進行二次點擊操作
            ac.setHitDiv('hitDiv');//設置異步提交時,進度條所在的div的ID值。數(shù)據(jù)處理過程中,提交按鈕將被隱藏,同時在相同位置將顯示一個進度條標識當前請求處理的進度
            ac.setIsasy(true);//設置本次提交的操作方式:true 異步方式,即當前提交無需等待response的響應,可完成類似cpu多線程同時處理的方式, false 同步方式即當前請求提交后,必須等待response的響應,這好比數(shù)據(jù)庫中的排它鎖,一時僅能保證一個請求的處理。
            ac.setFunctionname("insertUser");//設置本次提交執(zhí)行的sqlmap配置文件中的xml節(jié)點方法的id值,對大小寫敏感,如果你了解ibatis,應該知道這里指的東西。
            ac.setDomainname("OaUser");//設置本次提交數(shù)據(jù)封裝對象名稱(和后臺domain一致,不用加類全路徑,加已無所謂)對大小寫敏感,后臺自帶完成當前domain對象的全路徑添加匹配,這就要求,整個系統(tǒng)的domain存放在固定的package ,當然你實在不愿意,那就直接加上當前domain的這個包路徑,如  ac.setDomainname("com.test.OaUser");。
            ac.execute();//發(fā)送數(shù)據(jù)請求,因為這里僅考慮的是進行簡單的保存或刪除操作,所以沒有添加回調函數(shù)的處理
          }
           

            如果你感覺前面的定義過于繁瑣難記,那可以使用第二種方式,直接獲得數(shù)據(jù)表單居于xml格式封裝的字符串,前面忘記說一點,wmframework 所有數(shù)據(jù)請求都是通過xml格式封裝并通過ajax發(fā)出的,這點我在()中已經(jīng)進行了相關介紹說明。
          給出一個定義的參考

          function dosave() {
            
          var ac = new action();//創(chuàng)建js對象請求action對象

            ac.setForm(document.forms[0]);//設置本次提交表單數(shù)據(jù)所處的form對象,這里必須設置,不然WMvalidate沒法子幫你進行數(shù)據(jù)校驗
            ac.setUrl(cps+'/userAction.do?action=add');//同上
            ac.setTextDiv('textdiv');//同上
            ac.setHitDiv('hitDiv');//同上
            ac.setIsasy(true);//設置本次提交的操作方式:true 異步方式 false 同步方式
            var xmlStr = " <?xml version=\"1.0\" encoding=\"UTF-8\"?>"
                          
          +" <root>"
                          
          +" <vos id="OaUser""
                            
          +" <vo> "
                          
          +" <userName>測試用戶</userName> "
                          
          +" <userAccount>demo</userAccount> "
                            
          +" <password>123</password> "
                          
          +" <userType>1</userType> "
                            
          +" <departmentId>1</departmentId> "
                          
          +" <function>insertUser</function>"
                          
          +" </vo> "
                            
          +" </vos> "
                            
          +" </root> ";
            ac.setXmlstr(xmlStr);
          //設置請求數(shù)據(jù)xml字符串

            ac.execute();//同上
          }

           

                就這樣簡單的進行設置,就可以完成當前jsp頁面表單數(shù)據(jù)的提交保存操作,當然這里的設置過于簡單,其實在這里你還可以定義回調函數(shù),操作失敗處理函數(shù),操作成功處理函數(shù),調試跟蹤器等,但在v1.o中這樣的定義僅支持在本次操作為同步提交的模式。即ac.setIsasy(false)

              WMaction.execute()執(zhí)行后,會先調用WMvalidate進行數(shù)據(jù)校驗,當然你也可以不進行校驗,那就別設置上面的form參數(shù),不過方式僅支持數(shù)據(jù)采用第二種提交;WMvalidate校驗通過,則判斷當前用戶使用哪種方式轉載數(shù)據(jù);如第一種,則調用WMdataemun對象完成提交數(shù)據(jù)表單的枚舉類型封裝(在v2.0中這個對象已經(jīng)被廢棄),即把表單數(shù)據(jù)轉載在一個js定義的枚舉對象中,以進行統(tǒng)一的xml字符串拼接讀取,這個過程在WMdocobject完成;如用戶采用第二種定義方式,那就不經(jīng)過上述兩個對象的流轉,直接到WMservice對象中,在WMservice中最終構建XMLHttpRequest對象,并通過send方法把數(shù)據(jù)發(fā)送出去。這里給出個流程圖

           

              至此jsp前臺請求處理過程介紹基本結束,可能整個過程看起來很簡單。確實很簡單,因為WMframework本就是簡單的東西,不過2.0版本相對處理就比這個繁瑣一些,可兼容的東西也多一些,不過對于中小型web運用開發(fā)來說,這樣的處理基本上足夠了。先寫到這里吧,下次再繼續(xù),太多了看的人眼花,變成消化不良了不太好。。。

          (注:本人文章均為原創(chuàng),轉載請注明出處!20100616寫于深圳。)



          一篇好的文章應該如一壇佳釀,未償已久醉于心;或如一壺好茶,品嘗之間回味無窮;或如與心愛的人共進晚餐,僅餐秀色足以飽食。我不妄想自己的文章能驚世駭俗,但始終期待有“和旋之音,擊缶之伴”。
          posted on 2010-07-22 22:40 刀光劍影 閱讀(1142) 評論(0)  編輯  收藏

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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 工布江达县| 昆山市| 江阴市| 景洪市| 清苑县| 遂平县| 绥中县| 平武县| 苏尼特右旗| 名山县| 民和| 浑源县| 汉川市| 夏津县| 汶川县| 永胜县| 富顺县| 开阳县| 白玉县| 莱西市| 湖北省| 磐石市| 临西县| 夹江县| 新余市| 西贡区| 浦县| 宁阳县| 察雅县| 内黄县| 舟曲县| 来安县| 定日县| 新巴尔虎右旗| 西青区| 嵩明县| 宕昌县| 涞源县| 河曲县| 沙河市| 麻阳|