Struts2输入校验

Struts2学习笔记
******输入校验:******
*.输入校验是建立在类型转换之上的。也就是说先进行类型转换再进行输入校验。
*.在JSP页面的Struts标签库里的表单<s:form action="xxx">里内置了输入校验的功能。所以在任何一个表单元素类型不匹配出错时单再回到表单页面时会在出错表单元素上方提示出错信息。
*.ActionSupport类是实现在Action接口,Action里定义了ERROR,INPUP,LOGIN,NONE,SUCCESS五个静态常量,这几个默认的常量要能用则用。如果成功则execute()方法里返回:return SUCCESS。(规范)
*.如果类型转换or输入校验出错时Struts会自动去找struts.XML里所配置的INPUT常量所对应的JSP页面,并转到此页面。如:<result name="input">/input.jsp</result>
*.ActionSupport里有个Validate()方法,这个方法什么都不做,如果想要有验证机制的话请去实现这个方法。Validate()方法是ActionSupport类实现了Validateable这个接口所出现的。
*.在Validate()方法内判断出错添加:this.addFieldError("username(出错标签)", "username invalid(出错信息)");这样出错信息就被保存在fielderror的这个域里面,只要在JSP页面里加上struts标签<s:fielderror></s:fielderror>就可以显示出错信息的。
*.日期的比较Calendar里面有个before(Object when); after(Object when)方法可以比较日期。时间对比代码如下:
Calendar c1 = Calendar.getInstance();
c1.setTime(birthday);

Calendar c2 = Calendar.getInstance();
c2.setTime(graduation);

if(!c1.before(c2)){
this.addFiedError("birthday", "birthday should be before graduation");
}
*.遇到类型转换错误的时候(也就是说不能进行类型转换),struts2框架自动生成一条错误信息,并且将该错误信息放到addFieldError里面

类型转换与输入校验的流程:
1. 首先Struts2对客户端传来的数据进行类型转换。

2. 类型转换完毕后再进行输入校验。

3. 如果类型转换和输入校验都没有错误发生,那么进入execute方法(调用商业逻辑)

注意:如果类型转换不成功,也同样要进行输入校验。
*.如果在类型转换失败时,Struts会自动给你所要取的值赋默认值。再进行输入校验。
*.如何替换在类型转换时出现的默认提示:
(全局的)在Struts.xml里<constant name="struts.custom.i18n.resources" value="message"></constant>;是表示常量静态的值。是表示将struts里的struts.custom.i18n.resources国际化文件重新指向自定义的message文件。message.properties文件放在SRC目录下。
message.properties:
xwork.default.invalid.fieldvalue={0} error
代码说明:在全局类型转换不成功时将会提示出name名称+error字符串。{0}表示出错表单里属性名称。invalid:无适当的。这样做也就修改了struts默认的提示。
(局部的)properties资源文件和PojoAction.java类要在同一个目录包下。名称要和PojoAction.java类一模一样。如:PojoAction.properties
PojoAction.properties:
invalid.fieldvalue.XXX(表单里属性名称)=XXX error.
推荐用局部的。
*.validate()里addActionError(String anErrorMessage)用法:
在ActionSupport类里的addFieldError()方法是这个类实现了ValidationAware接口。还有addActionError(String anErrorMessage)方法:是Action级别的错误信息。addFieldError()方法其实是一个Map(键值对)把errors都放到一个Map里,然后把多个map放到一个ArrayList里面形成集合。
struts验证是判断hasErrors()的真假。如果(hasAction() || hasFieldErrors())里有一个为假,那么hasErrors()为候,验证就失败了。
JSP里Action级别的错误。struts标签为:<s:actionerror/>
*.不要struts标签里帮我设置好的东西:如:
<s:textfield name="username" label="username" theme="semple">;theme="semple"意思:主题设置为简单,这样就没有struts所带来的特殊功能了。
*.在Struts2里面没有DispathAction这个东西,只有Action,但有和DispathAction相同功能的东西,在struts.xml里<action name="register" class="com.text.action.RegisterAction" method="abc">;method="abc"这个就说明Action里不去找execute方法了。去找abc这个方法。(应用了反射机制)
注:与abc相对应验证的方法是validateAcb(){},就会跳到这个验证时面了。
注:无论前面有多少个自定义validate,validate()是一定会被执行的。解决方法:1.我们可以不去写validate()方法。2.打validate()方法改成validateExecute()方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值