4 Struts2输入校验
4.1
如果输入错误会自动回到 return INPUT;视图,如果给input配置返回结果,则会回到该界面。
如果要认为进行验证,必须重写validate()方法
/**
* 验证输入的格式是否正确
*
*/
@Override
public void validate() {
// TODO Auto-generated method stub
System.out.println("******");
//说明用户没有填用户名
if(null==this.getName()||"".equals(this.getName().trim())){
this.addFieldError("name","用户名不能为空");
}
//说明用户没有填密码
if(null==this.getPassword()||"".equals(this.getPassword().trim())){
this.addFieldError("password","密码不能为空");
}
}
4.2可通过struts2<s:fielderror></s:fielderror>进行错误信息在jsp界面的输出
4.3
if(null==this.getName()||"".equals(this.getName().trim()))注意先判断是否为null,防止直接跳到action进入,出现nullpointexception
4.4通过Calendar判断日期的先后顺序
if(null !=birthday && null != graduation)
{
Calendarc1 = Calendar.getInstance();
c1.setTime(birthday);
Calendarc2 = Calendar.getInstance();
c2.setTime(graduation);
if(!c1.before(c2))
{
this.addFieldError("birthday","birthdayshould be before graduation");
}
}
4.5
如果age被提交一个无法转换成int型的数据时,struts2框架自动奖age赋值为零,遇到类型转换错误的时候(也就是说不能进行类型转换),struts2框架自动生成一条错误信息,并且将该错误信息放到addFieldError里面
4.6<contant>配置
4.6.1全局类型转换校验
通过在struts.xml中配置一个<constant name = "struts.custom.i18n.resources"value ="message"/>并在src目录下建立一个message.propertise的文件,
Value的值是自己定义国际化的资源文件
Message.properties
#{0}表示当前的属性的名字,xwork.default.invalid.fieldvalue表示是类型转化出问题
xwork.default.invalid.fieldvalue ={0}errer
4.6.2局部类型转换校验
尽量多使用局部转化文件
对相应的action在同一个包下,建立一个同名的properties,如RegisterAction.properties,局部的会覆盖全局的,在里面配置。(Struts2先进性类型转换,后进行输入校验)
invalid.fieldvalue.age = "年龄出错"
类型转换与输入校验的流程
1. 首先Struts2对客户端传来的数据进行类型转换
2. 类型转换完毕后再进行输入校验
3. 如果类型转换和输入校验都没有错误发生,那么进入execute方法(调用商业逻辑)
注意:如果类型转换不成功,也同样要进行输入校验
4.6.3addFiedError(“name”,”错误信息”);将信息自动显示到name属性标签上方,
4.6.4actionError级别的错误
addActionError()
在jsp中使用<actionerror/>手动让其显示
<s:textfield name ="username"label="用户名" theme=”simple”> ,theme=”simple”表示不用Strut2原带的格式