zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    GhostBSD 3.0RC3,基于GNOME的FreeBSD
    Nagios 3.4.3 发布,企业级监控系统
    Jolokia 1.0.6 发布, JMX远程访问方法
    微软希望开发人员不要使 WebKit 成为新版 IE6
    Kwort Linux 3.5 正式版发布
    EJDB 1.0.24 发布,嵌入式 JSON 数据库引擎
    Pale Moon 15.3 Firefox“苍月”优化版发布
    Galera Load Balancer 0.8.1 发布
    SmartSVN V7.5 正式发布
    PostgresQL建立索引如何避免写数据锁定
  • 原文地址:https://www.cnblogs.com/forever2h/p/6726720.html
Copyright © 2011-2022 走看看