• 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>
  • 相关阅读:
    [Kotlin] Open Classes and Inheritance
    [Kotlin] Class
    [Kotlin] Reverse a List with downTo
    [Kotlin] Named loop
    [Kotlin] for loop
    [Kotlin] Array List ArrayList
    深度解读 java 线程池设计思想及源码实现
    源码实战 | 从线程池理论聊聊为什么要看源码
    自己实现一个简单的线程池
    死磕 java线程系列之自己动手写一个线程池(续)
  • 原文地址:https://www.cnblogs.com/forever2h/p/6726720.html
Copyright © 2020-2023  润新知