struts2.0输入校验
sturts2.0的输入校验分为field校验和action校验两种
一、filed校验(map实现)
1.在Action类中重写validate方法,编写自己的校验判断
this.addFieldError(String fieldName, String errorMessage)向页面中的属性添加错误信息
2.在struts.xml里面配置校验失败跳转的页面,即配置input属性。
3.显示错误信息
1)如果信息的输入采用普通的输入框,添加<s:fielderror></s:fielderror>标签即可显示出错误信息。
2)如果使用struts的标签,则会自动在错误页面显示错误信息。
同时struts如果类型转换失败也会自动为我们产生错误提示信息,但不够友好。这是我们可以自己编写信息替换struts自动生成的错误信息。
1.全局替换
首先在struts.xml里配置 <constant name="struts.custom.i18n.resources" value="baseName"/>,对应的需要在类路径下编写一个名字与value值相同,后缀为properties的资源文件:baseName.properties。
里面内容为:xwork.default.invalid.fieldvalue={0}想要提示的错误信息。这时struts会用此资源文件里配置的信息替换默认的错误提示。
缺点:此时错误信息还是相对简单,不够友好。
2.局部替换
在需要校验的类的相同目录下编写名字与类相同,后缀为properties的资源文件:ClassName.properties。
文件里内容为:invalid.fieldvalue.fieldName=错误提示信息。filedName为需要替换的属性名字。这样可以实现错误信息的精确控制。
注意:即使类型转换失败,它也会执行validate方法。在自动类型转换时,对int类型的属性,如果转换失败,会把属性值设为0;对对象类型的属性,类型转换失败会把值设为null。所有此时可能会出现一个属性多个错误信息的情况。
二、Action级别(Collection实现)
其实与field级别类似,只是使用addActionError(String anErrorMessage) 方法添加错误信息。
此时错误信息在页面的显示使用标签:<s:actionerror/>。
这时可能会出现既有field级别的提示,也出现action级别的错误信息提示。如果只希望出现action级别的提示(ActionError),可以将struts标签的theme属性设置为:simple,这时将将不会用表格封装数据,不会有struts默认产生的错误提示,label属性的值也不会显示。
三、对类似struts1.x的DispatchAction的校验
在struts1.x中有DispathcAction,可以在一个类中编写多个方法。同样,在struts2.x中也提供了类似功能。
1)方法和execute完全一样,只是方法名不一样,类似代码如下:
return SUCCESS;
}
要调用此方法只需在struts.xml文件中指定method属性的值。
2)此时,不同的方法可能有不同的校验方式,此时可以为此方法指定它所特有的校验方法。
方法命名规则为“validate + 首字母大写的方法名”,如下:
super.validate();
}
3)但这时如果自己重写了validate()方法,它在执行完validateMethodName()校验方法后,还会执行validate()方法,这时有两个解决办法:
a.不重写validate方法
b.将validate方法名改为:validateExecute()
总结:输入校验方式的选择要么使用field级别的,要么使用action级别的,不要两者混用。