struts2校验框架使用总结

这些天一直在赶手上做的那个游戏平台项目.怎么说呢,狭小的空间范围内碌碌无为的忙碌着.隔三两头时不时还遭到老大的"鄙视".经过几天的奔跑,经过大家几天的努力,完成了小阶段性的目标.下午的时间也终于可闲下来了.认真来看了下代码的流程.代码的实现,代码的风格.虽然不是很好,但也是我一个一个字母敲上去的.实践是检验真理的唯一途径,实践才是一切标准.实践才能为之提高,实践才能为之进步.但大到一季度,小到一天,不同阶段,不同时期的总结是人一生不可或缺的过程.总结中成长,成长中实现人生价值.
今天就来说说struts2的验证框架(validate).Struts校验框架提供了一种不用编写代码,只需修改配置文件即可对输入进行校验的功能。代码方式校验,即重写validate()方法。实际应用中,validate()与校验框架一般只选其一。
[size=large][color=red]1.struts对于数据的校验[/color][/size]
[size=x-large][b][color=red]int[/color]
整数
[color=red]double[/color]
实数
[color=red]expression[/color]
两数的关系比较
[color=red]email[/color]
邮箱地址
url
检查输入是否为url格式
visitor
使用预定义的validators进行验证
conversion
检查是否将出现数据转换错误
[color=red]regex[/color]
检查是否能匹配到正则表达式
[color=red]required[/color]
用于检查值是否为null
[color=red]requiredstring[/color]
用于检查string是否为null或空
[color=red]stringlength[/color]
检查string的长度是否在某个范围
date
检查date的范围[/b][/size]
<validators>
<validator type="requiredstring">
<param name="fieldName">buyer.username</param>
<param name="trim">true</param>
<message>必须输入用户名</message>
</validator>
<validator type="regex">
<param name="fieldName">buyer.username</param>
<param name="expression"><![CDATA[(\w{6,20})]]></param>
<message>用户名长度必须为6至20之间</message>
</validator>

<validator type="requiredstring">
<param name="fieldName">buyer.password</param>
<param name="trim">true</param>
<message>必须输入密码</message>
</validator>
<validator type="regex">
<param name="fieldName">buyer.password</param>
<param name="expression"><![CDATA[(\w{6,20})]]></param>
<message>密码长度必须为6至20之间</message>
</validator>

<validator type="regex">
<param name="fieldName">buyer.repassword</param>
<param name="expression"><![CDATA[(\w{6,20})]]></param>
<message>确认密码长度必须为6至20之间</message>
</validator>
<validator type="fieldexpression">
<param name="fieldName">buyer.repassword</param>
<param name="expression"><![CDATA[(buyer.repassword==buyer.password)]]></param>
<message>密码和确认密码必须一致</message>
</validator>

<validator type="requiredstring">
<param name="fieldName">buyer.email</param>
<param name="trim">true</param>
<message>必须输入邮箱地址</message>
</validator>
<validator type="regex">
<param name="fieldName">buyer.email</param>
<param name="expression"><![CDATA[(^\+?[a-z0-9](([-+.]|[_]+)?[a-z0-9]+)*@([a-z0-9]+(\.|\-))+[a-z]{2,6}$)]]></param>
<message>邮箱格式不对</message>
</validator>

<validator type="regex">
<param name="fieldName">buyer.idiograph</param>
<param name="expression"><![CDATA[(\w{6,20})]]></param>
<message>个性签名长度必须为6至20之间</message>
</validator>

<!--<validator type="requiredstring">
<param name="fieldName">buyer.blogtitle</param>
<param name="trim">true</param>
<message>必须输入博客标题</message>
</validator>
-->
<validator type="regex">
<param name="fieldName">buyer.blogtitle</param>
<param name="expression"><![CDATA[(\w{6,20})]]></param>
<message>博客标题长度必须为6至20之间</message>
</validator>

<field name="buyer.regTime">
<field-validator type="required">
<message>必须输入注册时间</message>
</field-validator>
<field-validator type="date">
<param name="min">2011-05-25</param>
<message>广告投放时间必须介于${min}之后!!!</message>
</field-validator>
</field>

[color=red] [size=large] 2.说明:校验框架有两种校验方式:field和validator, 字段校验一般用field 非字段一般用validator(其实两者都可以)[/size][/color]
[color=green]
A.field校验:先指定需要校验的属性,在指定校验方式.
B.validator校验:先指定校验方式,再指定需要校验的属性.两种方式是等价的.
C.验证错误将默认产生FieldError.
D.short-circuit="true":一个校验失败,是否是继续执行后续校验.
E.对于相同属性的FieldError,validate()方法中的验证和RegisterAction-validation.xml中的验证都会执行,并且FieldError都会显示。
执行顺序: RegisterAction-validation.xml => validate()
[/color]
只对action中的某个方法进行校验
-1-
需要校验的Action名 + -方法名 + -validation.xml
|
对应xml中<action>的属性的name值
如: RegisterAction-add-validation.xml
--对应 /add.action --对RegisterAction中的add()方法进行校验
-2-
在不需要进行验证的方法加上annotation,即在方法前加上@SkipValidation。
-3-
<action name=...>
<interceptor-ref name="defaultStack">
<param name="validation.excludeMethods">*</param>
<param name="validation.includeMethods">需要验证的方法名称,以逗号分隔</param>
</interceptor-ref>
</action>

[color=red][b]校验顺序[/b][/color]
如果既提供了RegisterAction-validation.xml,又提供了RegisterAction-add-validation.xml
Struts2会先校验RegisterAction-validation.xml,然后再去校验RegisterAction-add-validation.xml这两个都会被调用

[color=brown][size=x-large]建议:[/color][/size]
当有多个逻辑方法时,就不要提供RegisterAction-validation.xml
只提供相应方法的xml文件,如:RegisterAction-execute-validation.xml
  field校验:
<field name="name">
<field-validator type="requiredstring" >
<param name="trim">true</param>
<message>name required</message>
</field-validator>
<field-validator type="stringlength">
<param name="trim">true</param>
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>name length range : ${minLength} ~ ${maxLength}</message>
</field-validator>
</field>

validator校验:
<validator type="requiredstring">
<param name="fieldName">name</param>
<param name="trim">true</param>
<message>name required</message>
</validator>
<validator type="stringlength">
<param name="fieldName">name</param>
<param name="trim">true</param>
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>name length range : ${minLength} ~ ${maxLength}</message>
</validator>

[size=large][color=red]3.Struts2客户端校验[/color][/size]
设置struts标签<s:form>中validate="true"。这样就会根据RegisterAction-validation.xml生成页面Javascript,在客户端执行校验

[color=red][size=large]4.FieldError和ActionError的实现[/size][/color]
[color=blue]a.真正存放field级别错误信息的对象是LinkedHashMap。
b.该LinkedHashMap的key是String类型的,value是ArrayList类型,所以同一个key可以对应多个错误消息。
c.对于Action级别的错误信息,实际上是放置在ArrayList中的[/color]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值