一、输入校验案例(用户注册)
1、注册页面register.jsp
<h2>用户注册</h2>
<form action="register.action">
username:<input type = "username" size = "20" name = "username" title="username"/><br/>
password:<input type = "password" size = "20" name = "password"/><br/>
repassword:<input type = "password" size = "20" name = "repassword"/><br/>
age:<input type = "text" size = "20" name = "age"/><br/>
birthday:<input type = "text" size = "20" name = "birthday"/><br/>
graduation:<input type = "text" size = "20" name = "graduation"/><br/>
<input type = "submit" value = "submit"/>
</form>
2、处理用户注册的action类 RegisterAction.java
public class RegisterAction extends ActionSupport{
private String username;
private String password;
private Integer age;
private Date birthday;
private Date graduation;
//.....setter/getter....
public void validate(){
//用户名长度在4到10之间
if(null == username ||username.length()<4||username.length()>10){
//发生错误后将其添加到Action级别的错误中
this.addActionError("username invalid ");
//将发生的错误将其添加到Field级别错误中
this.addFieldError("username","username is validate");
}
//判断密码、年龄是否符合要求省略
//判断两个日期前后
if(null != birthday && null!= graduation){
Calendar c1 = new Calendar.getInstance();
c1.setTime(birthday);
Calendar c2 = new Calendar.getInstance();
c2.setTime(graduation);
if(!c1.before(c2)){
this.addActionError("birthday should be before graduaction");
}
}
}
public String execute()throws Exception{
return SUCCESS;
}
}
3、配置struts.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="struts2" extends="struts-default">
<action name="register" class="com.liusheng.action.RegisterAction">
<result name="success">index.jsp</result>
<result name="input">register.jsp</result>
</action>
</package>
</struts>
4、如果想要发生错误的提示信息显示到页面上还需要在register.jsp中添加如下代码
<s:actionerror cssStyle="color:red;"/><!-- 如果action发生错误就显示出来 -->
<s:fielderror></s:fielderror>
二、输入校验说明
1、通过在Action中的validate()方法进行处理,该方法的默认实现为空实现,因此该方法需要我们自己实现;
2、Action中各方法的执行顺序:
1):首先进行类型转换;
2):然后进行输入校验(执行validate()方法);
3):再次才是执行execute()方法;如果在上述过程中出现任何错误,都不会执行execute()方法
页面会转向struts.xml中该action的名为input的result所对应的页面。
3、自定义方法的输入校验方法
Action中自定义方法的输入校验,对于通过action的method属性所指定的自定义方法,其对应的自定义输入
校验方法名为validateMyExecute(假设自定义方法名为myExecute)。
当Action中即存在默认的校验方法与自定方法的校验方法,自定义的校验方法优先执行。
4、struts2的校验框架(有效的xml文件)
你想对哪个action进行校验(RegisterAction)
其对应的校验框架名称为:RegisterAction-validation.xml且该文件要置于与Action相同的包下
5、自定义Field级别的错误提示信息
1):新建一个以Action名命名的properties文件;
2):然后在该属性文件中指定每一个出错字段的错误消息
属性文件内容:invalid.fieldvalue.字段 = 错误消息
三、关于清空错误信息分析
对于两个错误级别的清楚方法:
你会发现当你在action中的validate()方法中的最后写入如下代码:
public void validate(){
this.addActionError("usename is validate");
this.addFieldError("username","is error");
this.getFieldErrors().clear();
this.getActionErrors().clear();
}
访问的现象是:错误提示依旧出现
原因是:通过两个方法会将之前存放错误信息的ArrayList对象信息拷贝一份到新产生的ArrayList对象(本质是引用的指向),因此
在对新的ArrayList对象进行clear()时,删除的是新对象的引用。而之前的错误信息没有收到任何影响。
如果需要进行清空则要调用:
this.clearActionErrors();
this.clearFieldErrors();