1. Struts数据效验
表单数据的验证:
前台验证:主要是通过JS验证, 表达数据是否合法!
示例:
//检查输入的字符是否为数字
function checkNum(){
return str.match(/\d/)==null; // \d是一个正则表达式,标识所有数字0-9
}
后台验证:通过后台java代码进行验证!
Struts数据效验, 通过拦截器完成:
<interceptor
name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>
实现数据校验的两种方式
方法一使用默认的拦截器进行代码手动校验
使用Action(必须继承ActionSupport 或者实现Action接口,不能只有单独的类,因为ActionSupport类实现了Validatetable接口,但他的validate方法是一个空方法,需要我们手动实现) validate()方法会在execute()方法前执行,数据正确才会执行execute()方法。
校验错误时,就//将错误添加到fieldError域中。
我们要指定校验某个方法 比如register() 就将validate改为 validateRegister()
Validate()则是校验所有的方法
步骤一:建立一个需要进行校验的注册界面
步骤二:创建一个Action类继承ActionSupport
public class UserAction extends ActionSupport{
private User user=new User();
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public void validateRegister() {
if(user.getUserName()==null||"".equals(user.getUserName())){
super.addFieldError("userName", "用戶名必填");
}
if(user.getPwd()==null||"".equals(user.getPwd())){
super.addFieldError("pwd","密码必填");
}
}
然后对action进行下注册~(别忘了web.xml中配置核心过滤器)
<struts>
<package name="validation" extends="struts-default">
<global-results>
<result name="input">/register.jsp</result>
</global-results>
<action name="user_*" class="cn.itcast.validation.UserAction" method="{1}">
<result name="success">/register.jsp</result>
</action>
</package>
</struts>
方法一完毕~
方法二使用XML方式校验Action中的方法
如果一个项目中有大量的Action就会重复的写很多的校验代码,很麻烦。我们使用方法二可以简化校验。
1)XML文件名称
语法: ActionClassName-validation.xml
注意:此xml需要与当期要验证的action在同一个目录:
举例:UserAction-validation.xml
2)验证指定的方法:
文件命名:
语法:ActionClassName-ActionName-validation.xml
举例:UserAction-user_register-validation.xml
验证UserAction中的register方法
步骤一:同样是建立一个被校验的注册界面(此处省略~)
步骤二:创建一个Action,但是校验处理不在validate()中进行 (配置struts同上,此处省略)
public class UserAction extends ActionSupport{
private User user=new User();
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String register(){
System.out.println(user);
System.out.println(1);
return SUCCESS;
}
}
步骤三:对register()方法进行校验,写配置文件,必须和UserAction在同级目录下
命名为UserAction-user_register-validation.xml
<validators>
<!-- 验证每一个字段用field表示 -->
<field name="user.userName">
<!-- 指定使用的验证器 -->
<field-validator type="requiredstring">
<!-- 验证失败的错误信息提示 -->
<message>用户名不能为空!</message>
</field-validator>
</field>
<field name="user.pwd">
<field-validator type="requiredstring">
<message>密码不能为空!</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">8</param>
<message>密码必须为${minLength}-${maxLength}位</message>
</field-validator>
</field>
<field name="user.birth">
<field-validator type="requiredstring">
<message>日期不能为空</message>
</field-validator>
<field-validator type="date">
<message>日期格式不正确</message>
</field-validator>
</field>
<field name="user.email">
<field-validator type="requiredstring">
<message>邮箱不能为空</message>
</field-validator>
<field-validator type="email">
<message>邮箱格式不正确</message>
</field-validator>
</field>
</validators>
最后我们还试着运行一下~~
错误信息的显示
方式1:显示struts运行期间产生的所有错误:
<s:fielderror></fielderror>
方式2:显示指定错误
<s:fielderror fieldName="user.userName"></s:fielderror>
修改struts标签默认的样式: 不让换行
方式1:
<style type="text/css">
ul{
display:inline;
}
ul li{
display:inline;
color:red;
}
</style>
方式2:
修改标签定义的模板
找到fielderror标签定义的模板文件:
Struts-core.jar\template\simple\ fielderror.ftl
把修改后的fielderror.ftl文件,放到src/ template/ simple/ fielderror.ftl
这样标签显示的样式就修改了!
因为该标签会自带一个列表的效果,不进行效果处理就会变成如下群魔乱舞~