当前位置:文档之家› Struts2之输入校验

Struts2之输入校验

一、Struts2输入校验介绍Struts2的输入校验和类型转换都是对请求参数进行处理。

输入校验顾名思义就是请求参数是否能够满足一定的要求;客户端校验&服务器端校验客户端校验是指在浏览器这端通过Javascript进行初步校验,为了减轻服务器端的负载;服务器端校验是校验数据的最后一道防线;在Struts2中,数据校验不需要写任何代码,只需要一个配置文件,配置校验的条件就可以了,非常简单;因此数据校验文件是数据校验的最重要的内容;二、数据校验规则文件1.数据校验规则文件规则:1.此文件中规定了参数的一些校验条件;2.可以包括字段型校验器和非字段型校验器;3.命名规则:ActionName-validation.xml,其中ActionName是Action类的名字;4.每个Action都有一个validation文件,规则文件放在和Action同目录下;5.在前面我们讲到的配置逻辑action中,如果需要对某个逻辑Action配置数据校验文件,则命名规则为:ActionName-LogicActionName-validation.xml;6.注意:当需要对逻辑action进行校验时,如果存在一般形式的ActionName-validaton.xml 文件,则也会对此逻辑Action进行校验;7.输入校验失败后,和类型转换一样,会将错误封装成fieldError,并放入Action Context 中,因此在JSP中添加<s:fielderror/>可显示错误,此内容也是我们在数据校验文件中配置的;8.当输入校验失败后,和类型转换一样,返回逻辑视图为input,因此在struts.xml中必须配<result name="input"></input>9.输入校验失败后,struts表单标签也会自动输出错误提示;字段型校验器&非字段型校验器字段型校验器:以每个Action属性为一个单位进行编写,即以如下风格编写:1.<validators>2.<field name="">3.<field-validator type="">4.<param name=""></param>5.<message></message>6.</field-validator>7.</field>8.9.</validators>3.非字段型校验器是以校验器为单位的,内容模板:[html]view plaincopyprint?1.<validator type="">2.<param name="fieldName"></param>3.<param name=""></param>4.<message></message>5.</validator>代码示例:此段代码中分别对字符串、日期、整型、email进行数据校验;Validation01Action.java[java]view plaincopyprint?1.package org.validation.action;2.3.import java.util.Date;4.5.import com.opensymphony.xwork2.ActionSupport;6.7.public class Validation01Action extends ActionSupport {8. private String name;9. private String email;10. private int age;11. private Date date;12. public String execute()throws Exception{13. return SUCCESS;14. }15. public String getName() {16. return name;17. }18. public void setName(String name) {19. = name;20. }21. public String getEmail() {22. return email;23. }24. public void setEmail(String email) {25. this.email = email;26. }27. public int getAge() {28. return age;29. }30. public void setAge(int age) {31. this.age = age;32. }33. public Date getDate() {34. return date;35. }36. public void setDate(Date date) {37. this.date = date;38. }39.40.}1.jsp[html]view plaincopyprint?1.<%@ page language="java"import="java.util.*"pageEncoding="UTF-8"%>2.<%@taglib prefix="s"uri="/struts-tags" %>3.4.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">5.<html>6.<head>7.8.<title>My JSP '1.jsp' starting page</title>9.10.<meta http-equiv="pragma"content="no-cache">11.<meta http-equiv="cache-control"content="no-cache">12.<meta http-equiv="expires"content="0">13.<meta http-equiv="keywords"content="keyword1,keyword2,keyword3">14.<meta http-equiv="description"content="This is my page">15. <!--16. <link rel="stylesheet" type="text/css" href="styles.css">17. -->18.19.</head>20.21.<body>22.<s:fielderror></s:fielderror>23.<s:form action="validator01">24.<s:textfield name="name"label="姓名"></s:textfield>25.<s:textfield name="email"label="邮箱"></s:textfield>26.<s:textfield name="age"label="年龄"></s:textfield>27.<s:textfield name="date"label="日期"></s:textfield>28.<s:submit value="提交"></s:submit>29.</s:form>30.</body>31.</html>如果是以字段型校验器配置,则参考以下:Validation01Action-validation.xml(1)<field name="">为一个属性,name为Action属性名称;(2)<field-validator type="">为配置一个校验器,type为校验器的类型;(3)<param>为配置参数,比如最小值、最大值;(4)<message>为错误信息,如果需要对错误提示信息进行国际化,则可以在全局国际化资源文件中配置,在校验规则文件中编写如下形式:<message key="key"/>,key为国际化资源文件的key即可;[html]view plaincopyprint?1.<!DOCTYPE validators PUBLIC2. "-//Apache Struts//XWork Validator 1.0.2//EN"3. "/dtds/xwork-validator-1.0.2.dtd">4.5.<validators>6.<field name="name">7.<field-validator type="requiredstring">8.<param name="trim">true</param>9.<message>姓名不能为空</message>10.</field-validator>11.<field-validator type="regex">12.13.<param name="expression"><![CDATA[(\w{4,10})]]></param>14.<message>姓名要在4-10位之间</message>15.</field-validator>16.</field>17.<field name="age">18.<field-validator type="requiredstring">19.<param name="trim">true</param>20.<message>年龄不能为空</message>21.</field-validator>22.<field-validator type="int">23.<param name="min">0</param>24.<param name="max">200</param>25.<message>年龄范围在0-200之间</message>26.</field-validator>27.</field>28.<field name="email">29.<field-validator type="requiredstring">30.<param name="trim">true</param>31.<message>邮箱不能为空</message>32.</field-validator>33.<field-validator type="email">34.35.<message>邮箱格式不正确</message>36.</field-validator>37.</field>38.<field name="date">39.<field-validator type="requiredstring">40.<param name="trim">true</param>41.<message>日期不能为空</message>42.</field-validator>43.<field-validator type="date">44.<param name="min">2010-01-01</param>45.<param name="max">2010-12-31</param>46.<message>日期在2010-01-01到2010-12-31之间</message>47.</field-validator>48.</field>49.50.</validators>而如果采用非字段校验器,则(1)<validator type="">表示一个校验器,type属性表示校验器的类型;(2)<param name="fieldName"></param> 此元素是必要的,指定Action属性的名称;(3)<message>表示错误信息;[html]view plaincopyprint?1.<!DOCTYPE validators PUBLIC2. "-//Apache Struts//XWork Validator 1.0.2//EN"3. "/dtds/xwork-validator-1.0.2.dtd">4.5.<validators>6.<validator type="requiredstring"short-circuit="true">7.<param name="fieldName">name</param>8.<param name="trim">true</param>9.<message key="aa"></message>10.</validator>11.<validator type="requiredstring"short-circuit="true">12.<param name="fieldName">age</param>13.<param name="trim">true</param>14.<message>年龄不能为空</message>15.</validator>16.<validator type="requiredstring"short-circuit="true">17.<param name="fieldName">email</param>18.<param name="trim">true</param>19.<message>邮箱不能为空</message>20.</validator>21.<validator type="requiredstring"short-circuit="true">22.<param name="fieldName">date</param>23.<param name="trim">true</param>24.<message>日期不能为空</message>25.</validator>26.<validator type="regex">27.<param name="fieldName">name</param>28.<param name="expression"><![CDATA[(\w{4,10})]]></param>29.<message>姓名要在4-10位之间</message>30.</validator>31.<validator type="int">32.<param name="fieldName">age</param>33.<param name="min">0</param>34.<param name="max">200</param>35.<message>年龄范围在0-200之间</message>36.</validator>37.<validator type="email">38.<param name="fieldName">email</param>39.<message>邮箱格式不正确</message>40.</validator>41.<validator type="date">42.<param name="fieldName">date</param>43.<param name="min">2010-01-01</param>44.<param name="max">2010-12-31</param>45.<message>日期在2010-01-01到2010-12-31之间</message>46.</validator>47.</validators>以下我们开始介绍内建校验器,以下介绍根据字段型校验器介绍;非字段校验器只需要简单变换即可;1.required校验器此校验器要求字段必须为非空;2.requiredstring校验器此校验器要求检验字符串非空并且必须长度大于0,即不能是""可选参数为:(1)trim:如果为true,则将前后的空白去掉,类似于String的trim函数;3.int校验器此校验器要求整数限定在一定范围之内;可选参数为:(1)min:最小值;(2)max:最大值;4.date校验器要求日期在一定范围之内;可选参数:(1)min:最小日期;(2)max:最大日期;5.fieldexpression校验器要求此校验器满足指定的逻辑表达式;可选参数:(1)expression:逻辑表达式;格式为:<![CDATA[(逻辑表达式)]]>6.email校验器要求字段一定要满足电子邮箱格式;7.url校验器要求字段格式满足URL格式;8.stringlength校验器要求字段是string,并且长度在一定范围之内;可选参数:(1)trim:删除前后空白;(2)minLength:最小长度;(3)maxLength:最大长度;9.regex校验器要求满足给定的正则表达式;可选参数:(1)expression:给出正则表达式;格式如:<![CDATA[(正则表达式)]]>(2)caseSensitive:是否区分大小写;四、手动校验如果内建校验器不满足要求,可以自定义校验器,方法是在Action类中重写public void validate()方法;并且如果不满足条件,调用addFieldError("name","message"),然后返回input逻辑视图;当然如果一个Action类中有多个逻辑Action,则validate方法就不管用,因此需要定义validateXxx()方法;比如:如果逻辑Action的处理方法是fun(),则定义validateFun()方法,实现和validate方法一样;注意:如果逻辑Action的校验函数是validateXxx(),则validate()一样也会被调用,因为只要对此物理Action进行校验,则validate()方法总会起作用。

相关主题