在WebWork2.2中(beta-2) 我們發(fā)現(xiàn)它使用DWRValidator來做客戶端校驗(yàn),而我們熟悉的JavaScript客戶端校驗(yàn)已經(jīng)沒有了.
DWRValidator的工作方式是利用input的onBlur事件來引發(fā)校驗(yàn)動(dòng)作,每次都連接到服務(wù)器端去進(jìn)行一次校驗(yàn)
我認(rèn)為DWRValidator主要存在如下幾個(gè)問題:
- 性能問題,每個(gè)input的一次onblur都會(huì)引發(fā)一個(gè)校驗(yàn)
- 校驗(yàn)是異步的
- 如果用戶不填寫數(shù)據(jù),直接點(diǎn)擊提交,目前是不會(huì)引發(fā)校驗(yàn)的(以后可能會(huì)修正,不過因?yàn)楫惒綑C(jī)制,不是很好處理)
當(dāng)然DWRValidator也有很多好處
- 用戶無需關(guān)心客戶端校驗(yàn)的處理
- 不用寫JavaScript了
- 客戶端校驗(yàn)和服務(wù)器端校驗(yàn)保持一致
無論如何,我們應(yīng)該給用戶更多選擇,于是,我經(jīng)過幾天的研究,給WebWork2.2加上了在2.1.6版本中存在的JavaScript客戶端校驗(yàn).
具體步驟如下:
- 在webwork.properties里面增加一個(gè)配置,來配置校驗(yàn)
- 從WebWork2.1.6中復(fù)制 ScriptValidationAware, JavaScriptVisitorFieldValidator,JavaScriptRequiredFieldValidator
- 從WebWork2.2中復(fù)制Form.java, UIBean.java,進(jìn)行相應(yīng)修改
- 創(chuàng)建一個(gè)新的模板template,例如叫jsxhtml,從xhtml模板目錄復(fù)制 form.ftl,form_close.ftl,theme.proerties 等并進(jìn)行修改
- 從webwork-2.2-beta-2.jar 以及 src.jar里面刪除Form,UIBean2個(gè)類
是的,你看到了一些bad smell,我們對webwork本身進(jìn)行了修改,這是一種非常不好的辦法.
不過目前為止我還沒有找到更簡單的辦法. (如果你有任何想法,可以告訴我 :) ) ,只好采取這種辦法.
當(dāng)然如果Webwork本身提供這種支持,那肯定就是更好地了. :) 如果你覺得這樣不錯(cuò),可以去WebWork的論壇發(fā)表你的意見,否則開發(fā)人員肯定是不會(huì)采取的.
注意事項(xiàng)!!!
webwork還在不斷的修改中,還沒有發(fā)布2.2的最后版本,所以下文提到的修改都是會(huì)隨時(shí)變化的,所以只有到了最后發(fā)布的時(shí)候,才能確定修改的內(nèi)容,請不要盲目修改.
修改配置文件,增加自定義設(shè)置
在自己項(xiàng)目里的webwork.properties文件里面增加
jsvalidator=true
true表示使用JavaScript校驗(yàn),否則即使你使用了對應(yīng)的模板也不會(huì)進(jìn)行設(shè)置.
為了使用對應(yīng)的模板,你可以在tag中指定使用的theme,也可以在webwork.properties里面指定默認(rèn)的theme:
webwork.ui.theme=jsxhtml
當(dāng)然如果你不需要使用javaScript校驗(yàn),請保持原來的設(shè)置
|
除經(jīng)特別注明外,本文章版權(quán)歸JScud Develop團(tuán)隊(duì)或其作者所有. 署名,非商業(yè)用途,保持一致. scud(飛云小俠) JScud Develop |