struts2教程(5)--请求参数校验
2017-04-18 16:19
337 查看
一、请求参数校验介绍
校验的分类 :客户端数据校验和服务器端数据校验
客户端数据校验 ,通过JavaScript完成校验 (改善用户体验,使用户减少出错 )
服务器数据校验 ,使用框架内置校验功能(struts2
内置校验功能 )-----
必须的
struts2 支持校验方式
代码校验 :在服务器端通过编写java代码,完成数据校验
配置校验 :XML配置校验(主流) 和 注解配置校验
二、手工代码校验请求参数
步骤一: 封装数据步骤二: 实现校验Action,必须继承ActionSupport类
步骤三: 覆盖validate方法,完成对Action的业务方法 数据校验
通过代码逻辑判断参数是否有效,如果参数非法
, this.addFieldError (ActionSupport提供)
workflow拦截器 跳转回 input页面
步骤四: 在jsp中 通过<s:fieldError/>
显示错误信息
* validate方法会对Action中所有业务方法进行校验,如果只想校验某一个方法: validate方法名()
三、Xml配置方式数据校验
XML配置方式 数据校验代码校验 不适用于大型项目,
流程数据复杂时,开发量和维护量都会很大
xml配置校验原理 : 将很多校验规则代码已经写好,只需要在xml中定义数据所使用校验规则就可以了
步骤一 :编写jsp
步骤二 :编写Action继承ActionSupport或者 实现
Validateable接口
步骤三 :封装请求参数
使用xml校验 必须提供get方法
步骤四 :编写校验规则xml文件
在Action所在包 编写Action类名-validation.xml对Action所有业务方法进行校验
引入DTD
------ xwork-core-2.3.7.jar 中 xwork-validator-1.0.3.dtd
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
内置校验器定义文件
xwork-core-2.3.7.jar 中 /com/opensymphony/xwork2/validator/validators/default.xml
内建校验器
required (必填校验器,要求被校验的属性值不能为null)
requiredstring (必填字符串校验器,要求被校验的属性值不能为null,并且长度大于0,默认情况下会对字符串去前后空格)
stringlength (字符串长度校验器,要求被校验的属性值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格)
regex (正则表达式校验器,检查被校验的属性值是否匹配一个正则表达式,expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true)
int(整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值)
double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值)
fieldexpression (字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过)
email(邮件地址校验器,要求如果被校验的属性值非空,则必须是合法的邮件地址)
url(网址校验器,要求如果被校验的属性值非空,则必须是合法的url地址)
date(日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值)
案例
required 必填校验器 <field-validator type="required"> <message>性别不能为空!</message> </field-validator> requiredstring 必填字符串校验器 <field-validator type="requiredstring"> <param name="trim">true</param> <message>用户名不能为空!</message> </field-validator> stringlength:字符串长度校验器 <field-validator type="stringlength"> <param name="maxLength">10</param> <param name="minLength">2</param> <param name="trim">true</param> <message><![CDATA[产品名称应在2-10个字符之间]]></message> </field-validator> int:整数校验器 <field-validator type="int"> <param name="min">1</param> <param name="max">150</param> <message>年龄必须在1-150之间</message> </field-validator> date: 日期校验器 <field-validator type="date"> <param name="min">1900-01-01</param> <param name="max">2050-02-21</param> <message>生日必须在${min}到${max}之间</message> </field-validator> url: 网络路径校验器 <field-validator type="url"> <message>传智播客的主页地址必须是一个有效网址</message> </field-validator> email:邮件地址校验器 <field-validator type="email"> <message>电子邮件地址无效</message> </field-validator> regex:正则表达式校验器 <field-validator type="regex"> <param name="regexExpression"><![CDATA[^13\d{9}$]]></param> <message>手机号格式不正确!</message> </field-validator> fieldexpression : 字段表达式校验 <field-validator type="fieldexpression"> <param name="expression"><![CDATA[(password==repassword)]]></param> <message>两次密码输入不一致</message> </field-validator>
程序源代码:
1、regist.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> <s:fielderror/> <form action="${pageContext.request.contextPath}/regist" method="post"> username:<input type="text" name="username"><s:fielderror fieldName="username.message"/><br> password:<input type="password" name="password"><s:fielderror fieldName="password.message"/><br> repassword:<input type="password" name="repassword"><br> hobby:<input type="checkbox" name="hobby" value="eat">吃<input type="checkbox" name="hobby" value="drink">喝<input type="checkbox" name="hobby" value="play">玩<br> age:<input type="text" name="age"><br> birthday:<input type="text" name="birthday"><br> email:<input type="text" name="email"><br> url:<input type="text" name="url"><br> telphone:<input type="text" name="telphone"><br> <input type="submit" value="注册"> </form> </body> </html>
2、类型转换类
package com.sihai.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; public class MyTypeConverter extends StrutsTypeConverter { // 接收页面传递的数据封装到javaBean. @Override public Object convertFromString(Map context, String[] values, Class toClass) { // System.out.println(context); //ognl.OgnlContext@faae2497 // System.out.println(values[0]); //[Ljava.lang.String;@100c4d // System.out.println(toClass); //class java.util.Date String value = values[0]; SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); Date date = null; try { date = sdf.parse(value); } catch (ParseException e) { // e.printStackTrace(); throw new RuntimeException(); } return date; } @Override public String convertToString(Map context, Object o) { return null; } }
3、UserAction-regist-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> <!-- 对username属性进行校验 --> <field name="username"> <!-- 指定username不能为空 --> <field-validator type="requiredstring"> <!-- 错误信息 --> <message>用户名不能为空--------</message> </field-validator> <!-- 长度校验,规定用户名必须在6-10位之间 --> <field-validator type="stringlength"> <param name="maxLength">10</param> <param name="minLength">6</param> <message>用户名必须在${minLength}-${maxLength}位之间</message> </field-validator> </field> <!-- 对age进行校验,规定年龄必须在10-40之间 --> <field name="age"> <field-validator type="int"> <param name="min">10</param> <param name="max">40</param> <message>年龄必须在${min}--${max}之间</message> </field-validator> </field> <!-- 对birthday进行校验 --> <field name="birthday"> <field-validator type="date"> <param name="min">1974-01-01</param> <param name="max">2004-12-31</param> <message>生日必须在${min}年到${max}年之间</message> </field-validator> </field> <!-- 校验邮箱 --> <field name="email"> <field-validator type="email"> <message>邮箱格式不正确</message> </field-validator> </field> <!-- url校验 --> <field name="url"> <field-validator type="url"> <message>url不能这空,类似于http://www.baidu.com</message> </field-validator> </field> <!-- 使用正则 --> <field name="telphone"> <field-validator type="regex"> <param name="regexExpression"><![CDATA[^135[0-9]{8}$]]></param> <message>电话号码必须是135xxxxxxxx</message> </field-validator> </field> <field name="repassword"> <field-validator type="fieldexpression"> <param name="expression"><![CDATA[(password==repassword)]]></param> <message>两次密码输入不一致</message> </field-validator> </field> </validators>
如何对指定的方法校验
格式 Action类名-ActionName(<action>元素name属性)-validation.xml
例如 :
校验AddCustomerAction中execute方法 配置<action name="addcustomer" .../>校验文件名字:
AddCusotmerAction-addcustomer-validation.xml
四、自定义校验规则
步骤一:自定义校验器 必须实现 Validator 接口
通常自定义校验器 继承 ValidatorSupport和
FieldValidatorSupport
ValidatorSupport 针对不是一个输入字段 (两个密码一致)
FieldValidatorSupport 针对是一个输入字段 (用户名非空)
步骤二:
注册校验器
在工程的src下新建validators.xml文件
引入 xwork-core-2.3.7.jar
中 xwork-validator-config-1.0.dtd
步骤三 :使用校验器
在Action所有包 创建Action类名-validation.xml
相关文章推荐
- Struts2---请求参数校验
- struts2_请求参数_手动校验(代码校验)
- JAVAWEB开发之Struts2详解(二)——Action接受请求参数、类型转换器、使用Struts2的输入校验、以及遵守约定规则实现Struts2的零配置
- struts2教程(3)--请求参数处理
- Struts2请求参数合法性校验机制
- Struts2中请求参数校验
- struts2-请求参数校验
- struts2教程:11、请求参数接收
- struts2中Action对请求参数有效性的校验
- 16_struts2_1请求参数获取和校验
- Struts2请求参数校验
- struts2请求参数的输入校验
- struts2_请求参数_配置校验(XML配置)
- struts2 拦截器 请求参数 更改
- struts2教程:16、输入校验
- 使用Struts2获取请求参数:Ljava.lang.String; cannot be cast to java.lang.String
- jQuery发送含有数组参数的ajax请求以及后台Struts2的OGNL解析错误
- Struts2(三) 接受请求参数
- Struts2接收请求参数原理
- 在Struts2拦截器中获取请求action名称及参数