在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 |