根据输入校验的处理场所的不同,可以将输入校验分为客户端校验和服务器端校验两种。服务器端验证目前有两种方式:

第一种:

参考:struts2:数据校验,通过Action中的validate()方法实现校验,图解

第二种:

使用validate()方法校验时,如果Web应用中存在大量Action就需要多次重写validate()方法,这使得代码非常繁琐。由于Struts2的校验框架本质上是基于XWork的validato框架,因此可以使用XWork的validator框架来对Struts2进行数据校验,以减少代码量。本文即讨论此种校验方式。

1. 前台页面加入错误提示标签(registerX.jsp)

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <%@ page isELIgnored="false"%>
  3. <%@ taglib uri="/struts-tags" prefix="s"%>
  4.  
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  6. <html>
  7. <head>
  8. </head>
  9. <body>
  10. <s:fielderror/>
  11. <s:form action="registerX" method="post">
  12. 账号:<s:textfield name="username"></s:textfield>
  13. <br/>
  14. 密码:<s:password name="password"></s:password>
  15. <br/>
  16. 重复密码:<s:password name="repassword"></s:password>
  17. <br/>
  18. 年龄:<s:textfield name="age"></s:textfield>
  19. <br/>
  20. 身高:<s:textfield name="height"></s:textfield>
  21. <br/>
  22. <s:submit value="提交"></s:submit>
  23. <br/>
  24. </s:form>
  25. </body>
  26. </html>

2.  后台action继承ActionSupport(RegisterXAction.java)

  1. package com.clzhang.ssh.demo1;
  2.  
  3. import com.opensymphony.xwork2.ActionSupport;
  4.  
  5. public class RegisterXAction extends ActionSupport {
  6. public static final long serialVersionUID = 1;
  7.  
  8. private String username;
  9. private String password;
  10. private String repassword;
  11. private Integer age;
  12. private Double height;
  13.  
  14. public String getUsername() {
  15. return username;
  16. }
  17. public void setUsername(String username) {
  18. this.username = username;
  19. }
  20. public String getPassword() {
  21. return password;
  22. }
  23. public void setPassword(String password) {
  24. this.password = password;
  25. }
  26. public String getRepassword() {
  27. return repassword;
  28. }
  29. public void setRepassword(String repassword) {
  30. this.repassword = repassword;
  31. }
  32. public Integer getAge() {
  33. return age;
  34. }
  35. public void setAge(Integer age) {
  36. this.age = age;
  37. }
  38. public Double getHeight() {
  39. return height;
  40. }
  41. public void setHeight(Double height) {
  42. this.height = height;
  43. }
  44.  
  45. @Override
  46. public String execute() {
  47. System.out.println(username + "|" + age + "|" + height + " register finished!");
  48.  
  49. return "register";
  50. }
  51. }

3. 增加校验配置文件(RegisterXAction-validation.xml)

3.1 命名规范

校验文件命名规则:ActionName-validation.xml,其中ActionName就是需要校验的action的类名。

如果需要在Action中对某个特定的方法进行校验,则需要为此特定方法专门定义一个校验文件(否则,调用默认的)。该文件命名规则为:actionNme-methodNae-validation.xml;同时,还需要在struts.xml文件配置action时指定其method属性(否则,调用默认的)。

3.2 位置规范

该文件应该与action类的文件位于同一个路径下。

3.3 该文件的定义

参考:struts-2.3.x\lib\xwork-core-2.3.x.jar包中xwork-validator-1.0.x.dtd文件的描述。

3.4 该文件中validator的种类

参考:xwork-core-2.3.x.jar\com\opensymphony\xwork2\validator\validators中的default.xml文件。

3.5 进行数据校验遵循的步骤

  • Struts2框架中的类型转换器对HTTP请求的数据进行数据类型转换,得到符合类型的值,比如本例中age被转换为int。
  • 使用Struts2的XWork校验框架进行校验,即根据actionName-validation.xml文件和actionName-methodName-validation.xml文件校验数据。
  • 调用validateX()方法来进行数据校验。
  • 调用validate()方法进行数据校验。
  • 如果数据校验发生错误,就会返回名为input的result,进入指定的视图资源而不会调用本该被调用的业务逻辑处理方法。如果数据校验过程中未出现错误,则会调用相应Action中的业务逻辑处理方法。

3.6 配置校验文件的方式

Struts2框架提供了两种方式来配置校验文件,一种是字段校验配置方式;另一种是非字段校验配置方式。

字段校验方式(field-validator)

  1. <!DOCTYPE validators PUBLIC
  2. "-//Apache Struts//XWork Validator 1.0.2//EN"
  3. "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
  4. <validators>
  5. <field name="username">
  6. <field-validator type="requiredstring">
  7. <param name="trim">true</param>
  8. <message>请输入用户名</message>
  9. </field-validator>
  10.  
  11. <field-validator type="stringlength">
  12. <param name="minLength">2</param>
  13. <param name="maxLength">16</param>
  14. <message>用户名长度在${minLength}到${maxLength}位之间!</message>
  15. </field-validator>
  16. </field>
  17.  
  18. <field name="password">
  19. <field-validator type="requiredstring">
  20. <param name="trim">true</param>
  21. <message>请输入密码</message>
  22. </field-validator>
  23.  
  24. <field-validator type="regex">
  25. <param name="expression"><![CDATA[\w{6,12}]]></param>
  26. <message>密码必须在6-12位之间,且只能为字母和数字</message>
  27. </field-validator>
  28. </field>
  29.  
  30. <field name="repassword">
  31. <field-validator type="requiredstring">
  32. <param name="trim">true</param>
  33. <message>请输入确认密码</message>
  34. </field-validator>
  35.  
  36. <field-validator type="fieldexpression">
  37. <param name="expression"><![CDATA[repassword==password]]></param> <!--这里也可以用repassword.equals(password)//-->
  38. <message>两次密码不相等</message>
  39. </field-validator>
  40. </field>
  41.  
  42. <field name="age">
  43. <field-validator type="required">
  44. <param name="trim">true</param>
  45. <message>年龄不能为空!</message>
  46. </field-validator>
  47.  
  48. <field-validator type="int">
  49. <param name="min">1</param>
  50. <param name="max">60</param>
  51. <message>年龄取值范围在${min}到${max}之间</message>
  52. </field-validator>
  53. </field>
  54.  
  55. <field name="height">
  56. <field-validator type="double">
  57. <param name="min">1.10</param>
  58. <param name="max">2.10</param>
  59. <message>身高取值范围在${min}到${max}米之间</message>
  60. </field-validator>
  61. </field>
  62. </validators>

非字段校验方式(non-fild validator),下面这个只是个示范,非本例所用。

  1. <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
  2. "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
  3.  
  4. <validators>
  5. <!-- age域 -->
  6. <field name="age">
  7. <!--域类型为int-->
  8. <field-validator type="int">
  9. <param name="min">10</param>
  10. <param name="max">40</param>
  11. <message>the age must be from 10 to 40!</message>
  12. </field-validator>
  13. </field>
  14. <!-- name域 -->
  15. <field name="name">
  16. <!-- 域类型为requiredstring类型 -->
  17. <field-validator type="requiredstring">
  18. <message>the age must be from 10 to 40!</message>
  19. </field-validator>
  20. </field>
  21. </validators>

3.7 校验器简介

  • required校验器,要求字段非空;
  • requiredstring校验器,要求字段值非空且长度大于0;
  • int校验器,表示整数,可以通过min/max参数指定范围;
  • date校验器,要求日期,可以通过min/max参数指定范围;
  • email校验器,要求电子邮件格式;
  • stringlength校验器,通过minLength/maxLength参数指定字段长度范围。

4. 在struts.xml文件中配置错误返回页面地址

  1. <action name="registerX" class="com.clzhang.ssh.demo1.RegisterXAction">
  2. <result name="register">/ssh/demo1/success.jsp</result>
  3. <result name="input">/ssh/demo1/registerX.jsp</result>
  4. </action>

5. 测试

打开IE,输入地址:http://127.0.0.1:8080/st/ssh/demo1/registerX.jsp

结果如下:

直接提交,结果如下:

struts2:数据校验,通过XWork校验框架实现(validation.xml)的更多相关文章

  1. struts2 数据校验

    通过struts2中延续自xwork框架的validation.xml配置方式进行数据校验,因struts2 下存在三种请求参数的注入方式,固按照不同注入方式对validation.xml的配置进行总 ...

  2. (转)struts2:数据校验,通过XWork校验框架实现(validation.xml)

    转载自:http://www.cnblogs.com/nayitian/p/3475661.html struts2:数据校验,通过XWork校验框架实现(validation.xml)   根据输入 ...

  3. struts2学习笔记--使用Validator校验数据

    我们在进行一些操作是需要对用户的输入数据进行验证,比如网站的注册,需要对各个数据项进行数据校验,Struts2提供了一些默认的校验器,比如数字的检测,邮箱的检测,字符串长度的检测等等. 常用的Vali ...

  4. struts2 之 struts2数据校验

    1. 数据校验一般分为2类:前端的校验(js校验),后端的校验(java代码):实际开发中大部分情况下都是采用js校验.在对数据安全要求较高的情况下可能会采用后端验证. 2.  Struts2提供了后 ...

  5. Struts2数据校验

    Struts2数据校验 1.常见数据校验方法 表单数据的校验方式: 表单中的数据必须被效验以后才能够被使用,常用的效验方式分为两种: 前台校验:也称之为客户端效验,主要是通过JS编程的方式进行表单数据 ...

  6. struts2数据校验与国际化

    数据校验: Action里的validate()方法能校验action类所有的方法,如果有错,如:addFieldError,会自动返回到workflow校验拦截器不向下继续进行,不用return i ...

  7. struts2使用验证文件实现校验

    原创 struts2框架提供了一种基于验证文件的输入验证方式,将验证规则保存在特定的验证文件中. 验证文件的命名规则 一般情况下,验证文件的命名规则是:Action类名-validation.xml. ...

  8. Hadoop基础-HDFS数据清理过程之校验过程代码分析

    Hadoop基础-HDFS数据清理过程之校验过程代码分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想称为一名高级大数据开发工程师,不但需要了解hadoop内部的运行机制,还需 ...

  9. 用C#实现的几种常用数据校验方法整理(CRC校验;LRC校验;BCC校验;累加和校验)

    CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错 ...

随机推荐

  1. iOSDay27之界面通信

    1. 属性传值(前面的界面给后面传值) 第一步: 在 SecondViewController.h 文件里定义一个存放传过来值的变量 contents #import <UIKit/UIKit. ...

  2. python 代码片段20

    #coding=utf-8 # 函数 def foo(x): print x foo(123) # import httplib def check_web_server(host,port,path ...

  3. HDU 2838 (DP+树状数组维护带权排序)

    Reference: http://blog.csdn.net/me4546/article/details/6333225 题目链接: http://acm.hdu.edu.cn/showprobl ...

  4. [Leetcode] Word BreakII

    Question: Given a string s and a dictionary of words dict, add spaces in s to construct a sentence w ...

  5. HDU-Minimum Inversion Number(最小逆序数)

    Problem Description The inversion number of a given number sequence a1, a2, ..., an is the number of ...

  6. Oracle常用监控SQL

    1.监控事例的等待: select event,sum(decode(wait_time,0,0,1)) prev, sum(decode(wait_time,0,1,0)) curr,count(* ...

  7. ThinkPHP3.2.2 Widget扩展以及widget demo实例

    Widget扩展一般用于页面组件的扩展. 先说明Widget被调用的方法,你只需要在你的模板文件中使用这样的语法:{:W("Demo/demo_widget_method",arr ...

  8. 通过hibernate session.connection()获得数据库连接时,导致的查询缓慢甚至假死机问题

    在使用hibernate的应用中,如果需要直接使用Java.sql.Connection,一般我们是通过hibernate的session.connection()获得的,然后session.clos ...

  9. (转)如何将数据库从SQL Server迁移到MySQL

    一.迁移Database Schema. 首 先使用Sybase Powerdesigner的逆向工程功能,逆向出SQL Server数据库的物理模型.具体操作是在Powerdesigner中选择“F ...

  10. Hadoop.2.x_网站PV示例

    一.网站基本指标(即针对于网站用户行为而产生的日志中进行统计分析) 1. PV:网页浏览量(Page View页面浏览次数,只要进入该网页就产生一条记录,不限IP,统计点每天(较多)/每周/每月/.. ...