您的位置:首页 > 编程语言 > Java开发

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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: