一、为什么要使用struts2的validate验证框架

:使用struts2的验证框架,能够提高客户端提交的数据的安全性。通过验证,确保保存进数据库的信息是正确的

二、使用struts2的validate框架?

: 1.我们需要配置struts2项目的最基本的jar包。(validate验证框架是有"xwork-core"包提供的)

: 2.使用struts2自带的validate验证有两种方法

a):使用代码实现 验证功能 (也就是重写ActionSupport中的validate()方法) 在validate方法中进行编写我们需

要的验证功能 这里需要提几点的就是:

1.当我们需要对action中的某一个指定的方法使用validate()方法验证时我们需要自定义一个validate

2.当我们使用自定义的validate方法时,最好将重写的ActionSupport的validate方法去掉 (这是为了避免

引起冲突,因为如果action类中存在重写的validate()方法 程序会自动调用我们自定义的validate方法 之

后再调用它 这样就验证了多次,非常不利于程序的效率。而且容易出现冲突)

3.在创建自定义的validate方法时需要注意该方法的 方法名! 该方法名由 validate+对应的表单提交的

action中的 执行方法名称(首字母大写)

附上一段代码:

  1. struts.xml:
  2. <action name="*/*" class="*" method="test">
  3. //这里的method指定action对象调用哪一个方法执行
  4. //..此处省略
  5. </action>
  6. 对应的action类中的片段:
  7. public String test(){//action操作的方法
  8. //..此处省略
  9. return "";
  10. }
  11. public void validateTest()
  12. //这是我们自定义的validate方法 (validateTest) 这便是方法名
  13. {             //一定要记住大写test的首字母
  14. //..此处省略
  15. }
  16. @override
  17. Public String execute()//这是重写ActionSupport的方法
  18. {
  19. //..此处省略
  20. return "";
  21. }
  22. @override
  23. public void validate()//这是重写ActionSupport的方法  如果我们需要有
  24. //execute方法并且还要对它接收的数据信息进行验证
  25. {
  26. //那么我们可以将方法名改成 valiateExecute()便可以了
  27. //..此处省略
  28. }

b):使用xml文件进行配置验证功能(建议使用xml配置文件进行validate的验证)

: 1.需要使用到xwork-core包下的  xwork-validate.dtd(版本根据项目进行选择,不过大体相同)

: 2.关于使用Xml进行验证 的两种情况: 全局验证 和局部验证

a):关于全局验证

全局就是针对整个action对象进行xml验证

当我们使用全局验证时候需要在  action对象的同目录下创建一个xml配置文件

文件名是由 : action对象的名称+(-validation.xml)

b):关于局部验证

局部验证是针对action对象中的某一个方法进行xml验证

使用局部验证的时候同样要在 action对象的同目录下创建一个xml配置文件

不过使用局部验证需要在struts.xml 中进行配置

代码如下:(struts.xml)

  1. <constant name="struts.enable.DynamicMethodInvocation" value="false" />
  2. <package name="struts2" extends="struts-default">
  3. //这一个<action>主要针对整个action对象
  4. <action name="register"class="org.viancent.action.RegisterAction">
  5. <result name="success">/show.jsp</result>
  6. <result name="input"> /register.jsp</result>
  7. </action>
  8. //这个<action>主要针对action的某一个方法 (采用了通配符 * 与 {1} 的值是相同的)
  9. <action name="register_*" class="org.viancent.action.RegisterAction"method="{1}">
  10. <result name="success">/show.jsp</result>
  11. <result name="input"> /register.jsp</result>
  12. </action>
  13. </package>

//如果我们需要访问action类中的test方法 则表单上可以这样写 <s:action="register_test">

所以该validate框架的xml配置文件名就是:action对象名+(-register_test-validation.properties)

:3.使用struts2的validate框架有两种验证类型

a):在服务端进行验证。
b):在客户端进行验证。
: 1.如果需要使用validate框架在客户端进行验证的话,一定要使用 struts2 的s标签
并且<s:form> 表单的theme不能为:simple
 
  1. 下面给出一个实例:
  2. action对象:
  3. package org.viancent.action;
  4. import java.util.Date;
  5. import com.opensymphony.xwork2.ActionSupport;
  6. public class RegisterAction extends ActionSupport {
  7. private String username;
  8. private String password;
  9. private String repassword;
  10. private int age;
  11. private Date birthday;
  12. private String users;
  13. public String getUsers() {
  14. return users;
  15. }
  16. public void setUsers(String users) {
  17. this.users = users;
  18. }
  19. public String getUsername() {
  20. return username;
  21. }
  22. public void setUsername(String username) {
  23. this.username = username;
  24. }
  25. public String getPassword() {
  26. return password;
  27. }
  28. public void setPassword(String password) {
  29. this.password = password;
  30. }
  31. public String getRepassword() {
  32. return repassword;
  33. }
  34. public void setRepassword(String repassword) {
  35. this.repassword = repassword;
  36. }
  37. public int getAge() {
  38. return age;
  39. }
  40. public void setAge(int age) {
  41. this.age = age;
  42. }
  43. public Date getBirthday() {
  44. return birthday;
  45. }
  46. public void setBirthday(Date birthday) {
  47. this.birthday = birthday;
  48. }
  49. @Override
  50. public String execute() throws Exception {
  51. // TODO Auto-generated method stub
  52. return super.execute();
  53. }
  54. // 自定义的执行方法
  55. public String test() throws Exception {
  56. System.out.println("test method invoked!");
  57. // TODO Auto-generated method stub
  58. return super.execute();
  59. }
  60. // 自定义的校验方法
  61. public void validateTest() {
  62. System.out.println("validateTest method invoked!");
  63. }
  64. @Override
  65. public void validate() {
  66. System.out.println("validate method invoked!");
  67. if (null == this.getPassword()
  68. || "".equals(this.getPassword()) || null ==
  69. this.getRepassword()
  70. || "".equals(this.getRepassword())) {
  71. return;
  72. }
  73. if (!this.getPassword().equals(this.getRepassword())) {
  74. this.addFieldError("repassword",
  75. "repassword should be same password");
  76. }
  77. }
  78. }

struts.xml的信息:

  1. <struts>
  2. <constant name="struts.enable.DynamicMethodInvocation" value="false" />
  3. <package name="struts2" extends="struts-default">
  4. <action name="register" class="org.viancent.action.RegisterAction">
  5. <result name="success">/show.jsp</result>
  6. <result name="input"> /register.jsp</result>
  7. </action>
  8. <action name="register_*" class="org.viancent.action.RegisterAction"
  9. method="{1}">
  10. <result name="success">/show.jsp</result>
  11. <result name="input"> /register.jsp</result>
  12. </action>
  13. </package>
  14. </struts>

局部validate框架的xml配置信息(RegisterAction-register_test-validation.xml)

  1. <validators>
  2. <field name="username"> //指明是对哪一个属性进行验证
  3. <field-validator type="requiredstring"> //验证的类型
  4. <param name="trim">true</param>
  5. <message>username should be notblank!</message>
  6. //如果错误显示给客户端的信息
  7. </field-validator>
  8. <field-validator type="stringlength">
  9. <param name="minLength">6</param>
  10. <param name="maxLength">10</param>
  11. <message>username should be not between${minLength} and ${maxLength}</message>
  12. </field-validator>
  13. </field>
  14. <field name="age">
  15. <field-validator type="required">
  16. <message>age should be not blank!</message>
  17. </field-validator>
  18. <field-validator type="int">
  19. <param name="min">1</param>
  20. <param name="max">150</param>
  21. <message>age should be between ${min} and ${max}</message>
  22. </field-validator>
  23. </field>
  24. <field name="birthday">
  25. <field-validator type="required">
  26. <message>birthday should be not blank!</message>
  27. </field-validator>
  28. <field-validator type="date">
  29. <param name="min">1990-10-10</param>
  30. <param name="max">2011-3-14</param>
  31. <message>birthday should be between ${min} and ${max} </message>
  32. </field-validator>
  33. </field>
  34. </validators>

全局validate框架的xml配置信息(RegisterAction-validation.xml)

  1. <validators>
  2. <field name="users">
  3. <field-validator type="requiredstring">
  4. <message>users should be not blank!</message>
  5. </field-validator>
  6. <field-validator type="stringlength">
  7. <param name="minLength">6</param>
  8. <param name="maxLength">10</param>
  9. <message>users should be between ${minLength} and ${maxLength}</message>
  10. </field-validator>
  11. </field>
  12. </validators>

view 界面的jsp信息:

  1. register.jsp:
  2. <body style="text-align: center">
  3. <s:form action="register_test">//服务端验证
  4. <s:textfield name="username" id="username" label="username"></s:textfield>
  5. <s:password name="password" id="password" label="password"></s:password>
  6. <s:password name="repassword" id="repassword" label="repassword"></s:password>
  7. <s:textfield name="age" id="age" label="age"></s:textfield>
  8. <s:textfield name="birthday" id="birthday" label="birthday"></s:textfield>
  9. <s:submit></s:submit>
  10. <s:reset></s:reset>
  11. </s:form>
  12. <s:form action="register" validate="true">//客户端验证  validate="true"(关键点)
  13. <s:textfield name="users" label="users" id="users"></s:textfield>
  14. <s:submit></s:submit>
  15. </s:form>
  16. </body>

show.jsp:

  1. <body>
  2. <s:property value="username"/>
  3. <s:property value="password"/>
  4. <s:property value="age"/>
  5. <s:property value="birthday"/>
  6. <s:property value="users"/>
  7. </body>

这里说明一下 validate xml验证的规则

<field name=""></field>  //自动校验器
<validator type=""></validator> //非自动校验器
验证规则:
requiredstring  验证是属性是否为("")   不需要设置参数
required     验证是属性是否为(null) 不需要设置参数
int   验证属性是否为整数 可以这是在什么数之间 需要参数 (min,max)
stringlength     验证字符串的长度   可以设置字符串需要的长度 需要参数(minLength,maxLength)
date 验证对象是否在某时段  可以设置时间段 需要参数(min,max)
regex 使用正则验证
 
其他具体可以参看xwork-core包中的com.opensymphony.xwork2.validator.validators 下面的类以及
xwork-default.xml

struts2:字段校验和非字段校验代码示例的更多相关文章

  1. [原创]java WEB学习笔记71:Struts2 学习之路-- struts2常见的内建验证程序及注意点,短路验证,非字段验证,错误消息的重用

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. java 子类、父类中静态代码块、字段,非静态代码块、字段以及构造函数的初始化顺序和次数

    一个类中的数据初始化顺序是面试官非常喜欢出的面试题之一,本文用一个实例来介绍java中子类.父类中静态代码块.字段,非静态代码块.字段以及构造函数的执行顺序和次数. 一.包结构

  3. Struts(二十四):短路验证&重写实现转换验证失败时短路&非字段验证

    短路验证: 若对一个字段使用多个验证器,默认情况下会执行所有的验证.若希望前面的验证器没有通过,后面的验证器就不再执行,可以使用短路验证. 1.如下拦截器,如果输入字符串,提交表单后,默认是会出现三个 ...

  4. RAC集群数据库连库代码示例(jdbc thin方式,非oci)

    1.RAC集群数据库连库代码示例(jdbc thin方式,非oci):jdbc.driverClassName=oracle.jdbc.driver.OracleDriverjdbc.url=jdbc ...

  5. mysql——修改表名、修改字段名、修改字段数据类型、增加字段、删除字段、修改字段排列位置、修改存储引擎、删除表 (示例)

    一.创建表和插入数据: ), mz ), bz ) ); ,'sww','sww01'); ,'aww','aww02'); ,'qww','qww03'), (,'eww','eww04'), (, ...

  6. TypeLoadException: 未能从程序集“ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“ECS.GUI.Define.ArmgAimPos”,因为它在 4 偏移位置处包含一个对象字段,该字段已由一个非对象字段不正确地对齐或重叠

    TypeLoadException: 未能从程序集"ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null ...

  7. Struts2学习笔记(九)——数据校验

    Struts2的数据校验属于服务器端校验,Struts2 支持校验方式 : 手动校验(代码校验) :在服务器端通过编写java代码,完成数据校验 自动校验(配置校验) :XML配置校验(主流) 和 注 ...

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

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

  9. 通讯服务类API调用的代码示例合集:短信服务、手机号归属地查询、电信基站查询等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 短信服务:通知类和验证码短信,全国三网合一通道,5秒内到达,费用低 ...

随机推荐

  1. 集中式vs分布式区别

    记录一下我了解到的版本控制系统,集中式与分布式,它们之间的区别做下个人总结. 什么是集中式? 集中式开发:是将项目集中存放在中央服务器中,在工作的时候,大家只在自己电脑上操作,从同一个地方下载最新版本 ...

  2. pythonchallenge 解谜 Level 0

    解谜地址: http://www.pythonchallenge.com/pc/def/0.html 这题没什么难度,意思就是得到2的38次方的值,然后,替换 http://www.pythoncha ...

  3. win7 hosts文件更改后无效,不生效问题

    通过记事本修改完hosts文件后,域名解析没有生效. 注:可以正常保存修改.服务dnsclient也已经启动 最后发现是hosts文件最后一行不是空行,回车后问题解决

  4. Django视图与网址

    Django中网址是写在 urls.py 文件中,用正则表达式对应 views.py 中的一个函数(或者generic类),我们用一个项目来演示. 下载本节所有源代码: 学习编程最好的办法就是动手敲代 ...

  5. 利用其它带文件防护功能的软件防止*.asp;*.jpg写入文件。

    此木马是一个.NET程序制作,如果你的服务器支持.NET那就要注意了,,进入木马有个功能叫:IIS Spy,点击以后可以看到所有站点所在的物理路径.以前有很多人提出过,但一直没有人给解决的答案.. 防 ...

  6. Struts2拦截器的使用 (详解)

    Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...

  7. PHP 使用 password_hash() 给密码加密

    PHP >= 5.5 时,可以使用 password_hash() 和 password_verify() 来对用户的密码进行加密和验证,例如在用户注册(加密存储)和登陆(验证): <?p ...

  8. 获取打开指定Action的所有应用包名

    获取打开指定功能的所有应用:发消息,分享等等. 如打开网页,下面代码即可查看所有的浏览器 //查找所有浏览器 private void queryPackage() { PackageManager ...

  9. Codevs 3728 联合权值

    问题描述 无向连通图G有n个点,n-1条边.点从1到n依次编号,编号为i的点的权值为Wi ,每 条边的长度均为1.图上两点(u,v)的距离定义为u点到v点的最短距离.对于图G上的点 对(u,v),若它 ...

  10. visual stdio 2015安装配置及原理

    安装与配置: 1.先配置好IIS,再安装visual stdio,主要原因系统会自注册.net Framework,若顺序不正确,则需手动注册,步骤: a. IIS可承载的Web核心 b. IIS6 ...