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();