锁定老帖子 主题:关于struts2的验证问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-20
Struts2 Validation有两种方式:
第一种,实现Validateable接口,validate方法;一般我们Action extends ActionSupport,重写validate即可。 第二种,通过Annotation(好像在2.1版本后不推荐了,详见 http://struts.apache.org/2.x/docs/validation-annotation.html)或validation.xml配置方式实现。 实现机制是,默认拦截器中有个前置拦截器validation interceptor,会执行上面的验证,在拦截器栈的最后有个workflow拦截器,如果有验证错误的话,直接跳转到错误页面(默认是INPUT页面,也可以通过InputConfig Annotation配置),不执行Action的业务逻辑。 设计的想法是很好,但是目前有个问题就是(楼主也提到些),这两种方式只能对所有方法实现相同的validate。不能区分不同的方法,不同的验证。 目前我想到的一个折中的实现方式是,自己通过业务方法实现业务逻辑验证,把错误通过addActionError/addFieldError保存起来,直接跳转到错误界面,通过<s:actionerror/>和<s:fielderror/>标签显示错误信息。 大家觉得这方式怎样?有什么优劣? |
|
返回顶楼 | |
发表时间:2011-07-25
javafansmagic 写道 Struts2 Validation有两种方式:
第一种,实现Validateable接口,validate方法;一般我们Action extends ActionSupport,重写validate即可。 第二种,通过Annotation(好像在2.1版本后不推荐了,详见 http://struts.apache.org/2.x/docs/validation-annotation.html)或validation.xml配置方式实现。 实现机制是,默认拦截器中有个前置拦截器validation interceptor,会执行上面的验证,在拦截器栈的最后有个workflow拦截器,如果有验证错误的话,直接跳转到错误页面(默认是INPUT页面,也可以通过InputConfig Annotation配置),不执行Action的业务逻辑。 设计的想法是很好,但是目前有个问题就是(楼主也提到些),这两种方式只能对所有方法实现相同的validate。不能区分不同的方法,不同的验证。 目前我想到的一个折中的实现方式是,自己通过业务方法实现业务逻辑验证,把错误通过addActionError/addFieldError保存起来,直接跳转到错误界面,通过<s:actionerror/>和<s:fielderror/>标签显示错误信息。 大家觉得这方式怎样?有什么优劣? 硬代码太多,不方便维护 |
|
返回顶楼 | |
发表时间:2011-07-25
skzr.org 写道
白糖_ 写道
struts2验证框架确实还有待加强:
1、要么针对Action类验证,要么针对method验证,前者导致很多不该验证的都验证了,后者导致xml验证文件一大堆 2、不支持占位符 优点也很明显: 1、使用xml配置,直接减少大量Action验证代码 2、验证规则可重用性高,利于维护
“重用” vs “清晰”? 直接调用验证工具的意思是用其他的客户端验证工具,比如说jquery.validate? |
|
返回顶楼 | |
发表时间:2011-07-25
szgaea 写道
直接调用验证工具的意思是用其他的客户端验证工具,比如说jquery.validate? 是的,就是这个意思,一般这些验证,都可以自己做一些方便的工具。
比如: form.submit提交前,遍历所有的input: input需要验证的,执行验证,不通过标示错误信息
以上都可以通过客户端js达到。 |
|
返回顶楼 | |
发表时间:2011-07-25
skzr.org 写道
szgaea 写道
直接调用验证工具的意思是用其他的客户端验证工具,比如说jquery.validate? 是的,就是这个意思,一般这些验证,都可以自己做一些方便的工具。
比如: form.submit提交前,遍历所有的input: input需要验证的,执行验证,不通过标示错误信息
以上都可以通过客户端js达到。
这是一个解决方案,有一点感觉就是既然有了,就再去搞一套,也挺麻烦,需要维护两套,客户端一套,服务端一套 |
|
返回顶楼 | |
发表时间:2011-07-25
最后修改:2011-07-25
这个问题我也一直纠结过。
分别维护客户端(js工具)和服务器验证(工具方法)后,发现开发越来越快,避免了以前使用框架带来的问题:
|
|
返回顶楼 | |