日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

DWR幫助說(shuō)明-如何編寫通用的單行編輯框

系統(tǒng) 1822 0

也許朋友們會(huì)以為這是 DWR 官方 發(fā)布的什么幫助,但非常遺憾這不是。現(xiàn)在不少朋友在使用 DWR 開發(fā)項(xiàng)目,我也是其中之一,但苦于關(guān)于 DWR 的幫助文檔實(shí)在太少,很多問題都不得不自己去鉆研 DWR 的源碼才能解決或理解。經(jīng)過一段時(shí)間的苦苦鉆研,總結(jié)出那么一點(diǎn)點(diǎn)心得,現(xiàn)在從 DWR 源碼實(shí)現(xiàn)的角度詳細(xì)講解 DWR 的使用,寫出來(lái)與大家分享。今天我談一談如何編寫通用的單行編輯框

當(dāng)我們需要編輯某行數(shù)據(jù)的時(shí)候,可以將該行的數(shù)據(jù)設(shè)置到一個(gè)已經(jīng)設(shè)計(jì)好的單行編輯框中進(jìn)行編輯。在編輯完成以后,點(diǎn)擊“保存”按鈕, DWR 可以采用 ajax 的方式訪問服務(wù)器,將數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中。怎樣設(shè)計(jì)一個(gè)單行編輯框呢?讓我們一步一步來(lái)完成吧。

1 、設(shè)計(jì)頁(yè)面。

設(shè)計(jì)好一個(gè)單行編輯框的頁(yè)面,為值對(duì)象中的每一個(gè)屬性設(shè)計(jì)一個(gè)數(shù)據(jù)輸入框,如單行文本框、多行編輯框、下拉框、單選框等等。設(shè)計(jì)這些數(shù)據(jù)輸入框的同時(shí)應(yīng)當(dāng)將它們的 id 設(shè)置成與值對(duì)象對(duì)應(yīng)的屬性名相同的名稱。這里我想特別說(shuō)明的是下拉框,因?yàn)橄吕蛑械南吕糠謶?yīng)當(dāng)是一個(gè)從數(shù)據(jù)庫(kù)中查出來(lái)的下拉列表。 DWR 為下拉框設(shè)計(jì)了一個(gè)非常便利的函數(shù) addOptions() ,函數(shù) addOptions 的完整寫法如下

Js代碼 復(fù)制代碼
  1. addoptions(eleid,?data,?valueprop,?textprop);??
    addoptions(eleid, data, valueprop, textprop);
  
? 在該函數(shù)中, eleid 是下拉框的 id data 是下拉框需要顯示的下拉列表的數(shù)據(jù)集,它通常需要包含至少兩行數(shù)據(jù),一行是下拉框 value 部分的數(shù)據(jù),即需要存數(shù)據(jù)庫(kù)的數(shù)據(jù),另一行是下拉框 text 部分的數(shù)據(jù),即僅僅用于在下拉列表中顯示的數(shù)據(jù)。比如,我們有一個(gè)選擇部門的下拉框, value 部分對(duì)應(yīng)的應(yīng)當(dāng)部門編號(hào),而 text 部分應(yīng)當(dāng)是部門名稱。清楚了 data valueprop textprop 就好說(shuō)了, valueprop 就是 value 部分的屬性名, textprop 就是 text 部分的屬性名。因此,寫一個(gè)選擇部門的下拉框應(yīng)當(dāng)這樣寫:
Js代碼 復(fù)制代碼
  1. DepartmentBus.findDepartment( ??
  2. ???? function (resultset){???? ??
  3. ????????addoptions(‘department’,resultset.collection, ??
  4. ????????????’departmentId’,’departmentName’);});??
      DepartmentBus.findDepartment(
    function(resultset){    
        addoptions(‘department’,resultset.collection,
            ’departmentId’,’departmentName’);});

    

?? 另外一個(gè)關(guān)鍵的問題我想特別提一下,就是值對(duì)象的主鍵。我在設(shè)計(jì) hibernate 的值對(duì)象的時(shí)候倡導(dǎo)的是使用無(wú)意義的主鍵。既然是無(wú)意義的主鍵,那么我們不應(yīng)當(dāng)將主鍵值展示給用戶。因此我在設(shè)計(jì)頁(yè)面的時(shí)候通常是將主鍵對(duì)應(yīng)的標(biāo)簽設(shè)計(jì)成一個(gè) hidden 標(biāo)簽。如果主鍵標(biāo)簽為空,在提交數(shù)據(jù)保存的時(shí)候, hibernate 將執(zhí)行插入操作;如果不為空,執(zhí)行的將是更新操作。因此,通常不需要分別設(shè)計(jì)插入頁(yè)面和更新頁(yè)面,可以將它們合二為一(一些因特殊原因必須將插入頁(yè)面和更新頁(yè)面拆開來(lái)編寫的情況應(yīng)當(dāng)另當(dāng)別論)。

2 、設(shè)計(jì)清除函數(shù)

如果你需要設(shè)計(jì)一個(gè)添加功能,則需要顯示一個(gè)沒有顯示任何值的空單行編輯框。然而使用 DWR 設(shè)計(jì)頁(yè)面,我們的思維需要發(fā)生一個(gè)轉(zhuǎn)變,那就是不要隨便刷新頁(yè)面。什么意思呢?當(dāng)你打開一個(gè)單行編輯框添加一條數(shù)據(jù)并保存以后,又需要添加另一條數(shù)據(jù)。如果不刷新頁(yè)面,則該頁(yè)面此時(shí)還依然顯示的是上一條數(shù)據(jù)的內(nèi)容,我們就需要設(shè)計(jì)一個(gè)頁(yè)面清除函數(shù)。如果我們?cè)? dwr.xml 文件中是一個(gè)一個(gè)注冊(cè)值對(duì)象,那么寫清除函數(shù)就非常簡(jiǎn)單了。具體編輯如下:

Js代碼 復(fù)制代碼
  1. var ?department?=? new ?Department(); ??
  2. dwr.util.setValues(department);??
    var department = new Department();
dwr.util.setValues(department);
  

? 第一行產(chǎn)生一個(gè)空值對(duì)象,第二行使用 setValues() 將頁(yè)面清空。

3 、設(shè)計(jì)編輯函數(shù)

當(dāng)我們?cè)诹斜盹@示框中選擇了某行并點(diǎn)擊“編輯”按鈕以后,需要一個(gè)編輯函數(shù)將該行的數(shù)據(jù)設(shè)置到單行編輯框中。用 DWR 怎樣設(shè)計(jì)編輯函數(shù)呢?前面提到,在列表顯示框裝載查詢結(jié)果集的時(shí)候,我們同時(shí)也將結(jié)果集放置到了一個(gè)叫 objCache 頁(yè)面端數(shù)據(jù)緩存中。當(dāng)用戶點(diǎn)擊“編輯”按鈕時(shí),需要將該行的行好以參數(shù)的形式傳遞給編輯函數(shù),然后編輯函數(shù)將到 objCache 中取得該行的值對(duì)象,最后使用 setValues() 將該值對(duì)象設(shè)置到單行編輯框中。

4 、設(shè)計(jì)保存函數(shù)

當(dāng)編輯數(shù)據(jù)完成以后,點(diǎn)擊“保存”按鈕以后,需要執(zhí)行一個(gè)保存函數(shù)來(lái)執(zhí)行保存。在設(shè)計(jì)保存函數(shù)的時(shí)候,首先需要從頁(yè)面中取出數(shù)據(jù)并放置到值對(duì)象中。為了完成該功能, DWR 提供了 getValues() 函數(shù)。在使用該函數(shù)的時(shí)候,我們必須寫產(chǎn)生一個(gè)空值對(duì)象,然后將該對(duì)象作為參數(shù)傳遞給 getValues() ,則頁(yè)面中的數(shù)據(jù)就植入到了該對(duì)象中。最后,使用 DWR 的特有方式,調(diào)用服務(wù)器端的 java 對(duì)象中的函數(shù),執(zhí)行保存。在執(zhí)行保存的過程這, DWR 還專門提供了事務(wù)處理的功能,當(dāng)然我從來(lái)沒有測(cè)試過該事務(wù)處理的能力。總結(jié)保存函數(shù)應(yīng)當(dāng)如下編寫:

Js代碼 復(fù)制代碼
  1. var ?department?=? new ?Department();???? ??
  2. dwr.util.getValues(department);???? ??
  3. dwr.engine.beginBatch(); ??
  4. DepartmentBus.updateDepartment(department); ??
  5. dwr.engine.endBatch(); ??
  6. objCache[curid]?=?obj;??
    var department = new Department();    
dwr.util.getValues(department);    
dwr.engine.beginBatch();
DepartmentBus.updateDepartment(department);
dwr.engine.endBatch();
objCache[curid] = obj;
  

? 回顧保存函數(shù),我們可以抽象出部分代碼,以便簡(jiǎn)化保存函數(shù)的編寫并提高代碼復(fù)用度。代碼中的第 2 3 5 6 行都可以抽象成一個(gè)通用的函數(shù)進(jìn)行編寫。而代碼中的 1 4 行則是個(gè)性化的代碼,應(yīng)當(dāng)在具體編寫每個(gè)功能的時(shí)候分別去實(shí)現(xiàn)。也就是說(shuō)保存函數(shù)被我分成了通用函數(shù)和具體實(shí)現(xiàn)函數(shù)兩部分,具體的實(shí)現(xiàn)見我的示例。

5 、設(shè)計(jì)刪除函數(shù)

當(dāng)我們?cè)诹斜盹@示框中選擇了某行并點(diǎn)擊“刪除”按鈕的時(shí)候,我們需要設(shè)計(jì)一個(gè)刪除函數(shù)來(lái)刪除該行數(shù)據(jù)。刪除函數(shù)的設(shè)計(jì)與保存函數(shù)的設(shè)計(jì)比較近似,這里我就不再累贅了,朋友們自己思考吧。

示例: 一個(gè)dwr+spring+hibernate的示例

DWR幫助說(shuō)明-如何編寫通用的單行編輯框


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 锡林浩特市| 烟台市| 德令哈市| 新竹市| 湖南省| 怀宁县| 镇平县| 新巴尔虎右旗| 晋宁县| 怀化市| 怀仁县| 玉屏| 镇巴县| 桃江县| 桓仁| 丁青县| 三门县| 德钦县| 象州县| 东乡| 中西区| 盖州市| 眉山市| 清河县| 锦州市| 光山县| 定安县| 三穗县| 桃园县| 申扎县| 兴安县| 沙洋县| 浏阳市| 五寨县| 崇明县| 和硕县| 小金县| 随州市| 丰宁| 泰和县| 泽普县|