一、校验器的配置风格

1、字段校验器:

<field name="被校验的字段">

<field-validator type="校验器名">

<!--此处需要为不同校验器指定数量不等的校验规则-->

<param name="参数名">参数值</param>

....................

<!--校验失败后的提示信息,其中key指定国际化信息的key-->

<message>校验失败后的提示信息</message>

<!--校验失败后的提示信息:建议用getText("I18Nkey"),否则可能出现Freemarker template Error-->

</field-vallidator>

<!-- 如果校验字段满足多个规则,下面可以配置多个校验器-->

</field>

2、非字段校验器(本实例所使用):

<validator type="校验器名">

<param name="fieldName">需要被校验的字段</param>

<!--此处需要为不同校验器指定数量不等的校验规则-->          
    <param name="参数名">参数值</param>

<message>校验失败后的提示信息</message>

</validator>

两种配置只是风格上的不同,没有本质区别。

二、实例

  本注册项目中使用了4个内置校验器。项目只有一个注册页面(register2.jsp),对应的业务控制器(Register2Action.java)。如果输入的数据经内置验证器验证成功,跳转到success2.jsp。

实例步骤如下:

注意:

Register2Action.java和Register2Action-validation.xml在同一个包validatorAction内

register2.jsp和success1.jsp在WebContent下(我用的是Eclipse)同一个文件夹validate内

1、web.xml配置FilterDispatcher

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.4"
  3. xmlns="http://java.sun.com/xml/ns/j2ee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  6. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  7.  
  8. <filter>
  9. <!-- 配置Struts2核心Filter的名字 -->
  10. <filter-name>struts2</filter-name>
  11. <!-- 配置Struts2核心Filter的实现类 -->
  12. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  13. </filter>
  14. <!-- 配置Filter拦截的URL -->
  15. <filter-mapping>
  16. <!-- 配置Struts2的核心FilterDispatcher拦截所有用户请求 -->
  17. <filter-name>struts2</filter-name>
  18. <url-pattern>/*</url-pattern>
  19. </filter-mapping>
  20.  
  21. </web-app>

2、编写视图组件(JSP页面)

(1)注册页面(register2.jsp)

  1. <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"
  2. pageEncoding="utf-8"%>
  3. <%@ taglib prefix="s" uri="/struts-tags" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  8. <title>用户注册页面</title>
  9. </head>
  10. <body>
  11. <center>
  12. 请输入信息:
  13. <hr>
  14. <s:form action="register2" method="post">
  15. <table border="1">
  16. <tr>
  17. <td>
  18. <s:textfield name="userName" label="姓名" size="16" />
  19. </td>
  20. </tr>
  21. <tr>
  22. <td>
  23. <s:password name="userPassword" label="密码" size="18" />
  24. </td>
  25. </tr>
  26. <tr>
  27. <td>
  28. <s:password name="ruserPassword" label="再次输入密码" size="18" />
  29. </td>
  30. </tr>
  31. <tr>
  32. <td>
  33. <s:textfield name="userAge" label="年龄" size="16" />
  34. </td>
  35. </tr>
  36. <tr>
  37. <td>
  38. <s:textfield name="userTelephone" label="电话" size="16" />
  39. </td>
  40. </tr>
  41. <tr>
  42. <td>
  43. <s:textfield name="userEmail" label="邮箱" size="16" />
  44. </td>
  45. </tr>
  46. <tr>
  47. <td>
  48. <s:submit value="提交" />
  49. </td>
  50. </tr>
  51. </table>
  52. </s:form>
  53. </center>
  54. </body>
  55. </html>

(2)验证成功页面(success2.jsp)

  1. <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"
  2. pageEncoding="utf-8"%>
  3. <%@ taglib prefix="s" uri="/struts-tags" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  8. <title>校验成功</title>
  9. </head>
  10. <body>
  11. 校验通过,用户信息如下:
  12. <hr>
  13. 姓名:<s:property value="userName" />
  14. <br>
  15. 密码:<s:property value="userPassword" />
  16. <br>
  17. 年龄:<s:property value="userAge" />
  18. <br>
  19. 电话:<s:property value="userTelephone" />
  20. <br>
  21. 邮箱:<s:property value="userEmail" />
  22. </body>
  23. </html>

3、编写业务控制器(Register2Action.java)

  1. package validatorAction;
  2.  
  3. import com.opensymphony.xwork2.ActionSupport;
  4.  
  5. public class Register2Action extends ActionSupport{
  6.  
  7. private String userName;
  8. private String userPassword;
  9. private String ruserPassword;
  10. private int userTelephone;
  11. private int userAge;
  12. private String userEmail;
  13. public String getUserName() {
  14. return userName;
  15. }
  16. public void setUserName(String userName) {
  17. this.userName = userName;
  18. }
  19. public String getUserPassword() {
  20. return userPassword;
  21. }
  22. public void setUserPassword(String userPassword) {
  23. this.userPassword = userPassword;
  24. }
  25. public String getRuserPassword() {
  26. return ruserPassword;
  27. }
  28. public void setRuserPassword(String ruserPassword) {
  29. this.ruserPassword = ruserPassword;
  30. }
  31. public int getUserTelephone() {
  32. return userTelephone;
  33. }
  34. public void setUserTelephone(int userTelephone) {
  35. this.userTelephone = userTelephone;
  36. }
  37. public int getUserAge() {
  38. return userAge;
  39. }
  40. public void setUserAge(int userAge) {
  41. this.userAge = userAge;
  42. }
  43. public String getUserEmail() {
  44. return userEmail;
  45. }
  46. public void setUserEmail(String userEmail) {
  47. this.userEmail = userEmail;
  48. }
  49.  
  50. public String execute(){
  51. return "success";
  52. }
  53.  
  54. }

4、配置struts.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5. <struts>
  6.  
  7. <package name="intercept" extends="struts-default">
  8. <action name="register2" class="validatorAction.Register2Action">
  9. <result name="input">/validate/register2.jsp</result>
  10. <result name="success">/validate/success2.jsp</result>
  11. </action>
  12. </package>
  13. </struts>

5、内置验证器的验证文件(Register2Action-validation.xml)

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE validators PUBLIC
  3. "-//Apache Struts//XWork Validator 1.0.3//EN"
  4. "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
  5.  
  6. <validators>
  7. <!-- 字符串长度校验器 ,校验userName属性-->
  8. <validator type="stringlength">
  9. <param name="fieldName">userName</param>
  10. <param name="maxLength">16</param>
  11. <param name="minLength">6</param>
  12. <message>姓名长度为${minLength}到${maxLength}个字符!</message>
  13. </validator>
  14.  
  15. <!-- 字符串长度校验器 ,校验userPassword属性-->
  16. <validator type="stringlength">
  17. <param name="fieldName">userPassword</param>
  18. <param name="maxLength">16</param>
  19. <param name="minLength">6</param>
  20. <message>密码长度为${minLength}到${maxLength}个字符!</message>
  21. </validator>
  22.  
  23. <!-- 字段表达式校验器-->
  24. <validator type="fieldexpression">
  25. <param name="fieldName">userPassword</param>
  26. <param name="expression">
  27. <!-- 验证两次输入的密码是否相同 -->
  28. <![CDATA[userPassword==ruserPassword]]>
  29. </param>
  30. <message>两次密码不一致!</message>
  31. </validator>
  32.  
  33. <!-- 整数校验器-->
  34. <validator type="int">
  35. <param name="fieldName">userAge</param>
  36. <param name="min">1</param>
  37. <param name="max">130</param>
  38. <message>年龄必须在${min}到${max}之间!</message>
  39. </validator>
  40.  
  41. <!-- 整数校验器 -->
  42. <validator type="int">
  43. <param name="fieldName">userTelephone</param>
  44. <param name="min">22222222</param>
  45. <param name="max">99999999</param>
  46. <message>电话必须在${min}到${max}之间的八位号码!</message>
  47. </validator>
  48.  
  49. <!-- 邮件地址校验器-->
  50. <validator type="email">
  51. <param name="fieldName">userEmail</param>
  52. <message>请使用正确的邮件格式!</message>
  53. </validator>
  54.  
  55. </validators>

如果验证失败:

注意文件命名规则(X-validation.xml)

检查stringlength等属性的大小写,还有字段是否和前面匹配;

查看struts-2.3.28.1\src\xwork-core\src\main\resources\xwork-validator-1.0.3.dtd文件,拷贝前4行代码,因版本而异。

等等……

Struts2内置校验器——完整实例代码的更多相关文章

  1. struts2内置拦截器和自定义拦截器详解(附源码)

    一.Struts2内置拦截器 Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特 性.这些内置的拦截器在struts-default.xml中配置.只有配置了拦截 ...

  2. Struts2内建校验器(基于校验框架的文件校验)

    位于xwork-2.0.4.jar压缩包中( com.opensymphony.xwork2.validator.validators)有个文件default.xml ,该文件中定义了Struts2框 ...

  3. Struts2自定义拦截器——完整实例代码

    比如一个网上论坛过滤系统,将网友发表的不文明.不和谐的语言,通过拦截器对这些文字进行自动替代. 该项目包含: 1.自定义拦截器(MyInterceptor.java) 2.发表评论的页面(news.j ...

  4. Struts2的手工自定义验证--完整实例代码

    ActionSupport类实现了Validateable.ValidationAware接口, 其中Validateable接口就是验证器接口,该接口有一个validate()方法, validat ...

  5. 关于UtilTimerStack类的使用--XWork2、Struts2内置性能诊断类

    关于UtilTimerStack类的使用--XWork2.Struts2内置性能诊断类 一.UtilTimerStack做什么用的? 这个本来是Xwork2(Struts2的核心)的相关的工具类,可以 ...

  6. 2018.11.20 Struts2中对结果处理方式分析&struts2内置的方式底层源码剖析

    介绍一下struts2内置帮我们封装好的处理结果方式也就是底层源码分析 这是我们的jar包里面找的位置目录 打开往下拉看到result-type节点 name那一列就是我们的type类型取值 上一篇博 ...

  7. python进阶04 装饰器、描述器、常用内置装饰器

    python进阶04 装饰器.描述器.常用内置装饰器 一.装饰器 作用:能够给现有的函数增加功能 如何给一个现有的函数增加执行计数的功能 首先用类来添加新功能 def fun(): #首先我们定义一个 ...

  8. python基础语法16 面向对象3 组合,封装,访问限制机制,内置装饰器property

    组合: 夺命三问: 1.什么是组合? 组合指的是一个对象中,包含另一个或多个对象. 2.为什么要用组合? 减少代码的冗余. 3.如何使用组合? 耦合度: 耦: 莲藕 ---> 藕断丝连 - 耦合 ...

  9. python内置装饰器

    前言 接着上一篇笔记,我们来看看内置装饰器property.staticmethod.classmethod 一.property装饰器 1. 普通方式修改属性值 code class Celsius ...

随机推荐

  1. Django组件(四) Django之Auth模块

    Auth模块概述 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能 ...

  2. luoguP2826 LJJ的数学课

    思路 把公式拆开维护两个值,一个a[i]的总和,一个a[i]*i的总和 也可以用树状数组维护,模板题 代码 #include <iostream> #include <vector& ...

  3. AtCoder 杂题训练

    前言: 因为要普及了,今年没一等就可以退役去学文化课了,所以暑假把历年noip普及组都刷了一遍,离noip还有50+天,想弄点强化训练什么的. 想了想,就这些天学文化课之余有空就把AtCoder之前那 ...

  4. each遍历小结

    JQ中的遍历函数 (逐个加工函数) 格式: $(‘.box p’).each(function(index,element){ })也可以写成 $.each(‘.box p’,function(ind ...

  5. java web项目启动进入首页的配置方式(包含过滤跳转首页实现)

    本文为博主原创,未经允许不得转载: 项目启动成功,进入首页的方式,我们往往在web.xml 中通过以下的方式默认进入跳转首页, <welcome-file-list> <welcom ...

  6. /etc/fstab 文件解析

    首先介绍一下fstab :这个文件描述系统中各种文件系统的信息.一般而言,应用程序仅读取这个文件,而不对它进行写操作.对它的维护是系统管理员的工作.在这个文件中,每个文件系统用一行来描述,在每一行中, ...

  7. R语言-attach、detach、with

    在R语言中,对于串列,数据框中的数据的进行操作时,为了避免重复地键入对象名称,可使用attach或with. 1.attach() 假设data.frame包含列name,age attach(one ...

  8. centos7: vsftpd安装及启动: ftp配置(以虚拟用户为例)

    centos7: vsftpd安装及启动: ftp配置 1安装: yum -y install vsftpd /bin/systemctl start vsftpd.service #启动 /bin/ ...

  9. codeforces 700a//As Fast As Possible// Codeforces Round #364(Div. 1)

    题意:n个人要运动ll长,有个bus带其中几个人,问最短时间 最后所有人在同一时间到终点是用时最少的.由于搭bus相当于加速,每个人的加速时间应该一样.先计算bus走过的路程route.看第一个人被搭 ...

  10. C++&C#外挂(内存修改)

    大学时候因为主修C#语言(当然现在做的是javaweb开发),那时在网上学了用C#做外挂的教程,外挂嘛,大家都懂的.这里只是低级的修改内存,不涉及到截获数据包.如果是欺骗服务器,修改服务器数据,那就难 ...