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