首页 > 代码库 > struts2 之 struts2数据校验

struts2 之 struts2数据校验

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="http://www.mamicode.com/">  </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="http://www.mamicode.com/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="http://www.mamicode.com/">  </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="http://www.mamicode.com/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>

 

struts2 之 struts2数据校验