zoukankan      html  css  js  c++  java
  • struts2 输入验证(服务器端)

    在struts2中,我们可以实现对action的所有方法进行校验或者对action的指定方法进行校验。
          对于输入校验struts2提供了两种实现方法:
          采用手工编写代码实现。
          基于XML配置方式实现。

    输入校验的流程:

            1、类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。
            2、如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息添加到fieldErrors里。不管类型转换是否出现异常,都会进入第3步。
            3、系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。
            4、再调用action中的validate()方法。
            5、经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。



    1.手工编写代码实现对action中所有方法输入校验

           通过重写validate()方法实现, validate()方法会校验action中所有与execute方法签名相同的方法。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统的fieldErrors包含失败信息,Struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息。

    验证例子如下:

    package com.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class UserAction extends ActionSupport{
    	private String UserName;
    	private String message;
    	public String getUserName() {
    		return UserName;
    	}
    	public void setUserName(String userName) {
    		UserName = userName;
    	}
    	public String getMessage() {
    		return message;
    	}
    	public void setMessage(String message) {
    		this.message = message;
    	}
    	
    	public String execute(){
    		this.message = "验证通过";
    		return "success";
    	}
    	//重写validate()方法
    	public void validate() {
    		// TODO Auto-generated method stub
    		<span style="color:#FF0000;">if(UserName==null || UserName.equals("")){
    			this.addFieldError("UserName", "用户名不能为空");
    		}</span>
    	}
    		
    }

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <%@ taglib uri="/struts-tags" prefix="s" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    	<title>主页</title>
    </head>
    <body>
    	<span style="color:#FF0000;"><s:fielderror></s:fielderror></span>
    	<form method="post" action="/Validate/Validate/UserInfo">
    		用户名:<input type="text" name="UserName"/>
    		<input type="submit" value="提交"/>
    	</form>
    	${message}
    	
    </body>
    </html>

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    
    <struts>
    	
    	<package name="Validate" namespace="/Validate" extends="struts-default">
    		<action name="UserInfo" class="com.action.UserAction" method="execute">
    			<span style="color:#FF0000;"><result name="input">/UserInfo.jsp</result></span>
    			<result name="success">/UserInfo.jsp</result>
    		</action>
    	</package>
    
    </struts>

    2.基于XML配置方式实现对action的所有方法进行输入校验

              使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校验文件,校验文件和action类放在同一个包下,文件的取名格式为:

                ActionClassName-validation.xml
                ActionClassName为action的简单类名
                validation为固定写法
    如果Action类为cn.itcast.UserAction,那么该文件的取名应为:UserAction-validation.xml。

                <field>指定action中要校验的属性,<field-validator>指定校验器,上面指定的校验器requiredstring是由系统提供的,系统提供了能满足大部分验证需求的校验器,这些校验器的定义可以在xwork-2.x.jar中的com.opensymphony.xwork2.validator.validators下的default.xml中找到。

                <message>为校验失败后的提示信息,如果需要国际化,可以为message指定key属性,key的值为资源文件中的key。
                在这个校验文件中,对action中字符串类型的username属性进行验证,首先要求调用trim()方法去掉空格,然后判断用户名是否为空。


    例子如下:

    package com.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class <span style="color:#FF0000;">UserAction</span> extends ActionSupport{
    	private String UserName;
    	private String message;
    	public String getUserName() {
    		return UserName;
    	}
    	public void setUserName(String userName) {
    		UserName = userName;
    	}
    	public String getMessage() {
    		return message;
    	}
    	public void setMessage(String message) {
    		this.message = message;
    	}
    	
    	public String execute(){
    		this.message = "验证通过";
    		return "success";
    	}
    //	//重写validate()方法
    //	public void validate() {
    //		// TODO Auto-generated method stub
    //		if(UserName==null || UserName.equals("")){
    //			this.addFieldError("UserName", "用户名不能为空");
    //		}
    //	}
    		
    }
    
    UserAction-validation.xml文件
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> 
    
    <validators>
        <field name="UserName">
            <field-validator type="requiredstring">
                <param name="trim">true</param>
                <message>用户名不能为空!</message>
            </field-validator>
        </field>
    </validators>
    
    Struts.xml文件
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    
    <struts>
    	
    	<package name="ValidateXml" namespace="/ValidateXml" extends="struts-default">
    		<action name="UserInfo" class="com.action.UserAction" method="execute">
    			<result name="input">/UserInfo.jsp</result>
    			<result name="success">/UserInfo.jsp</result>
    		</action>
    	</package>
    
    </struts>

    struts2提供的校验器列表

    系统提供的校验器如下:
              required:必填校验器,要求field的值不能为null
              requiredstring:必填字符串校验器,要求field的值不能为null,并且长度大于0,默认情况下会对字符串去前后空格
              stringlength:字符串长度校验器,要求field的值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格
              regex:正则表达式校验器,检查被校验的field是否匹配一个正则表达式.expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true
              int:整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值
              double:双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值
              fieldexpression:字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过。
              email:邮件地址校验器,要求如果field的值非空,则必须是合法的邮件地址
              url:网址校验器,要求如果field的值非空,则必须是合法的url地址
              date:日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值
              conversion:转换校验器,指定在类型转换失败时,提示的错误信息
              visitor:用于校验action中的复合属性,它指定一个校验文件用于校验复合属性中的属性
              expression:OGNL表达式校验器,expression参数用于指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时,校验通过,否则不通过,该校验器不可用在字段校验器风格的配置中


  • 相关阅读:
    CC++ 文件操作
    loadrunner之Paramater在负载测试中的数据生成规则
    loadrunner关联及web_reg_save_param方法浅析
    mysql union 与 union all 语法及用法
    sql 语句中as的用法和作用
    数据库主从复制和读写分离
    《剑指offer》算法题第十二天
    《剑指offer》算法题第十一天
    《剑指offer》算法题第十天
    《剑指offer》算法题第九天
  • 原文地址:https://www.cnblogs.com/laohuihui/p/5308760.html
Copyright © 2011-2022 走看看