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="<%=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>
原文地址:https://www.cnblogs.com/forever2h/p/6726720.html