1. 数据校验一般分为2类:前端的校验(js校验),后端的校验(java代码);实际开发中大部分情况下都是采用js校验。在对数据安全要求较高的情况下可能会采用后端验证。
2. Struts2提供了后端验证机制。有两种方式来实现,一种是通过硬编码来实现,一种是通过校验框架来实现。在struts2如果使用struts2提供校验机制,那么必须继承ActionSuport类。该类中有一个vaildete方法,在处理的action类中重写该方法,那么在执行所有方法的时候,会执行validate方法。validate方法通过以后才执行处理方法。如果要验证特定的方法,那么需要为特定的方法指定其验证方法,命名规则,如果处理方法为xxx,那么验证方法为vaildateXxx。执行顺序为先执行validateXxx,在执行validate方法,在执行xxx方法。
3. 添加校验方法后执行流程:
4. 实现步骤:
(a).在处理类中添加校验方法:
public class UserAction extends ActionSupport{ private User user; //添加的处理方法 public String add(){ System.out.println("执行add"); System.out.println("执行添加动作"); return Action.SUCCESS; } public void validateAdd(){ System.out.println("执行validateAdd"); if(user.getName().trim().length()==0){ //添加错误消息有两种做法,一种是全局的--addActionError //一种局部的Field--addFieldError //用户名不能为空 this.addFieldError("name", "用户名不能为空"); } if(user.getName().trim().length()>0&&user.getName().trim().length()<4||user.getName().trim().length()>10){ this.addFieldError("name", "用户名长度为4到10之间"); } } @Override public String execute() throws Exception { System.out.println("执行execute"); return super.execute(); } /** * 该方法会在执行execute(会在所有的处理方法前)之前执行,该方法通过以后再执行处理方法 * 如果在validate方法中 有添加FieldError或者ActionError则该方法验证没通过 * 重写父类的校验方法 在方法中实现相关的校验规则 * */ public void validate() { System.out.println("执行validate方法"); } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
(b). 在页面中添加struts的标签库,并且将错误信息显示<s:fieldError>或者<s:actionError>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> </head> <body> <form action="add.action" method="post"> 用户名:<input type="text" name="user.name"/><s:fielderror fieldName="name"></s:fielderror><br> 密码:<input type="password" name="user.pwd"/><br> 年龄:<input type="text" name="user.age"/><br> <input type="submit" value="submit"/> </form> </body> </html> c) 在action的配置中一定要配置结果为input的跳转页面 <action name="add" class="cn.sxt.action.UserAction" method="add"> <result name="input">/add.jsp</result> <result>/success.jsp</result> </action>
5 .通过struts2提供的校验框架来实现数据校验:
(a). 在action所在包下添加校验规则文件 ActionClassName-validation.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<!-- 配置某一个field的验证规则 -->
<field name="user.name">
<!-- 在field中添加其验证规则 -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户必须输入</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">4</param>
<param name="maxLength">10</param>
<message>用户名长度在${minLength}到10之间</message>
</field-validator>
</field>
</validators>
(b). 在页面中添加struts的标签库,并且将错误信息显示<s:fieldError>或者<s:actionError>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> </head> <body> <form action="add.action" method="post"> 用户名:<input type="text" name="user.name"/><s:fielderror fieldName="user.name"></s:fielderror><br> 密码:<input type="password" name="user.pwd"/><br> 年龄:<input type="text" name="user.age"/><br> <input type="submit" value="submit"/> </form> </body> </html>
(c). 在action的配置中一定要配置结果为input的跳转页面:
<action name="add" class="cn.sxt.action.UserAction" method="add">
<result name="input">/add.jsp</result>
<result>/success.jsp</result>
</action>