用户在客户端浏览器表单填写数据,比如在注册时,要求用户名长度不能小于5且不大于12,注册密码长度不能小于6且不能大于10。这时就需要用到数据验证,当然这里所讨论的都是服务器端对数据的验证,而客户端验证(可以采用JavaScript验证)在这里不做过多介绍。
下面首先举一个手动编码验证的例子来进行说明。
1、新建一个注册页面register.jsp:
<%@ taglib uri="/struts-tags" prefix="s" %>
<body>
<s:actionerror cssStyle="color:red"/>
<form action="doregister.action">
username:<input type="text" name="username" size="20"><br>
password:<input type="password" name="password" size="20"><br>
<input type="submit" value="register">
<input type="reset" value="reset">
</form>
</body>
这里用到了标签库,<s:actionerror cssClass="color:red"/>这一句是显示出action级别的错误信息,在Struts2框架里,验证错误级别有两个,一个是action级别的错误,一个是field字段或者说属性级别的错误。属性级别的错误在Struts2在调用setField方法如果出现类型转换错误,则会自动生成field级别的错误;而我们这里用到的是action级别的错误。
2、编写对应的action类,DoRegister类继承ActionSupport类,重写了之前已经用过的execute方法,这里又重写了一个新的方法validate方法,validate方法同样也是Struts2框架会自行调用,并且它会先于execute方法之前调用。在validate方法内编写了验证逻辑。如果在执行execute方法之前,任何步骤出问题,就会返回一个“input”值,不会在返回“success”值。在validate方法里添加action级别的错误信息。
package com.xbb.action;
import com.opensymphony.xwork2.ActionSupport;
public class DoRegister extends ActionSupport {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public void validate() {
if (null != username || username.length() < 5 || username.length() > 12) {
this.addActionError("the length of username should be >=5 and <=12 ");
}
if (null != password || password.length() < 6 || password.length() > 15) {
this.addActionError("the length of password should be >=6 and <=15");
}
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
3、配置struts.xml文件,添加action:
<action name="doregister" class="com.xbb.action.DoRegister">
<result name="success">/successRegister.jsp</result>
<result name="input">/register.jsp</result>
</action>
其中两个<result>分别代表验证成功和失败,input则重新转回register.jsp。
4、现在编写成功注册页面,successRegister.jsp:
<body>
username:<%=request.getParameter("username") %><br>
password:<%=request.getParameter("password") %><br>
</body>
浏览器地址栏输入:http://localhost:8080/Struts/register.jsp ,写入错误信息:
提交后出现:
说明编写的验证逻辑正常运行了,现在输入正常数据,提交后转到successRegister.jsp:
ok。