Struts2内置校验器——完整实例代码
一、校验器的配置风格
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
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.4"
- xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <filter>
- <!-- 配置Struts2核心Filter的名字 -->
- <filter-name>struts2</filter-name>
- <!-- 配置Struts2核心Filter的实现类 -->
- <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
- </filter>
- <!-- 配置Filter拦截的URL -->
- <filter-mapping>
- <!-- 配置Struts2的核心FilterDispatcher拦截所有用户请求 -->
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- </web-app>
2、编写视图组件(JSP页面)
(1)注册页面(register2.jsp)
- <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"
- pageEncoding="utf-8"%>
- <%@ taglib prefix="s" uri="/struts-tags" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>用户注册页面</title>
- </head>
- <body>
- <center>
- 请输入信息:
- <hr>
- <s:form action="register2" method="post">
- <table border="1">
- <tr>
- <td>
- <s:textfield name="userName" label="姓名" size="16" />
- </td>
- </tr>
- <tr>
- <td>
- <s:password name="userPassword" label="密码" size="18" />
- </td>
- </tr>
- <tr>
- <td>
- <s:password name="ruserPassword" label="再次输入密码" size="18" />
- </td>
- </tr>
- <tr>
- <td>
- <s:textfield name="userAge" label="年龄" size="16" />
- </td>
- </tr>
- <tr>
- <td>
- <s:textfield name="userTelephone" label="电话" size="16" />
- </td>
- </tr>
- <tr>
- <td>
- <s:textfield name="userEmail" label="邮箱" size="16" />
- </td>
- </tr>
- <tr>
- <td>
- <s:submit value="提交" />
- </td>
- </tr>
- </table>
- </s:form>
- </center>
- </body>
- </html>
(2)验证成功页面(success2.jsp)
- <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"
- pageEncoding="utf-8"%>
- <%@ taglib prefix="s" uri="/struts-tags" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>校验成功</title>
- </head>
- <body>
- 校验通过,用户信息如下:
- <hr>
- 姓名:<s:property value="userName" />
- <br>
- 密码:<s:property value="userPassword" />
- <br>
- 年龄:<s:property value="userAge" />
- <br>
- 电话:<s:property value="userTelephone" />
- <br>
- 邮箱:<s:property value="userEmail" />
- </body>
- </html>
3、编写业务控制器(Register2Action.java)
- package validatorAction;
- import com.opensymphony.xwork2.ActionSupport;
- public class Register2Action extends ActionSupport{
- private String userName;
- private String userPassword;
- private String ruserPassword;
- private int userTelephone;
- private int userAge;
- private String userEmail;
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- public String getUserPassword() {
- return userPassword;
- }
- public void setUserPassword(String userPassword) {
- this.userPassword = userPassword;
- }
- public String getRuserPassword() {
- return ruserPassword;
- }
- public void setRuserPassword(String ruserPassword) {
- this.ruserPassword = ruserPassword;
- }
- public int getUserTelephone() {
- return userTelephone;
- }
- public void setUserTelephone(int userTelephone) {
- this.userTelephone = userTelephone;
- }
- public int getUserAge() {
- return userAge;
- }
- public void setUserAge(int userAge) {
- this.userAge = userAge;
- }
- public String getUserEmail() {
- return userEmail;
- }
- public void setUserEmail(String userEmail) {
- this.userEmail = userEmail;
- }
- public String execute(){
- return "success";
- }
- }
4、配置struts.xml
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
- "http://struts.apache.org/dtds/struts-2.3.dtd">
- <struts>
- <package name="intercept" extends="struts-default">
- <action name="register2" class="validatorAction.Register2Action">
- <result name="input">/validate/register2.jsp</result>
- <result name="success">/validate/success2.jsp</result>
- </action>
- </package>
- </struts>
5、内置验证器的验证文件(Register2Action-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属性-->
- <validator type="stringlength">
- <param name="fieldName">userName</param>
- <param name="maxLength">16</param>
- <param name="minLength">6</param>
- <message>姓名长度为${minLength}到${maxLength}个字符!</message>
- </validator>
- <!-- 字符串长度校验器 ,校验userPassword属性-->
- <validator type="stringlength">
- <param name="fieldName">userPassword</param>
- <param name="maxLength">16</param>
- <param name="minLength">6</param>
- <message>密码长度为${minLength}到${maxLength}个字符!</message>
- </validator>
- <!-- 字段表达式校验器-->
- <validator type="fieldexpression">
- <param name="fieldName">userPassword</param>
- <param name="expression">
- <!-- 验证两次输入的密码是否相同 -->
- <![CDATA[userPassword==ruserPassword]]>
- </param>
- <message>两次密码不一致!</message>
- </validator>
- <!-- 整数校验器-->
- <validator type="int">
- <param name="fieldName">userAge</param>
- <param name="min">1</param>
- <param name="max">130</param>
- <message>年龄必须在${min}到${max}之间!</message>
- </validator>
- <!-- 整数校验器 -->
- <validator type="int">
- <param name="fieldName">userTelephone</param>
- <param name="min">22222222</param>
- <param name="max">99999999</param>
- <message>电话必须在${min}到${max}之间的八位号码!</message>
- </validator>
- <!-- 邮件地址校验器-->
- <validator type="email">
- <param name="fieldName">userEmail</param>
- <message>请使用正确的邮件格式!</message>
- </validator>
- </validators>
如果验证失败:
注意文件命名规则(X-validation.xml)
检查stringlength等属性的大小写,还有字段是否和前面匹配;
查看struts-2.3.28.1\src\xwork-core\src\main\resources\xwork-validator-1.0.3.dtd文件,拷贝前4行代码,因版本而异。
等等……
Struts2内置校验器——完整实例代码的更多相关文章
- struts2内置拦截器和自定义拦截器详解(附源码)
一.Struts2内置拦截器 Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特 性.这些内置的拦截器在struts-default.xml中配置.只有配置了拦截 ...
- Struts2内建校验器(基于校验框架的文件校验)
位于xwork-2.0.4.jar压缩包中( com.opensymphony.xwork2.validator.validators)有个文件default.xml ,该文件中定义了Struts2框 ...
- Struts2自定义拦截器——完整实例代码
比如一个网上论坛过滤系统,将网友发表的不文明.不和谐的语言,通过拦截器对这些文字进行自动替代. 该项目包含: 1.自定义拦截器(MyInterceptor.java) 2.发表评论的页面(news.j ...
- Struts2的手工自定义验证--完整实例代码
ActionSupport类实现了Validateable.ValidationAware接口, 其中Validateable接口就是验证器接口,该接口有一个validate()方法, validat ...
- 关于UtilTimerStack类的使用--XWork2、Struts2内置性能诊断类
关于UtilTimerStack类的使用--XWork2.Struts2内置性能诊断类 一.UtilTimerStack做什么用的? 这个本来是Xwork2(Struts2的核心)的相关的工具类,可以 ...
- 2018.11.20 Struts2中对结果处理方式分析&struts2内置的方式底层源码剖析
介绍一下struts2内置帮我们封装好的处理结果方式也就是底层源码分析 这是我们的jar包里面找的位置目录 打开往下拉看到result-type节点 name那一列就是我们的type类型取值 上一篇博 ...
- python进阶04 装饰器、描述器、常用内置装饰器
python进阶04 装饰器.描述器.常用内置装饰器 一.装饰器 作用:能够给现有的函数增加功能 如何给一个现有的函数增加执行计数的功能 首先用类来添加新功能 def fun(): #首先我们定义一个 ...
- python基础语法16 面向对象3 组合,封装,访问限制机制,内置装饰器property
组合: 夺命三问: 1.什么是组合? 组合指的是一个对象中,包含另一个或多个对象. 2.为什么要用组合? 减少代码的冗余. 3.如何使用组合? 耦合度: 耦: 莲藕 ---> 藕断丝连 - 耦合 ...
- python内置装饰器
前言 接着上一篇笔记,我们来看看内置装饰器property.staticmethod.classmethod 一.property装饰器 1. 普通方式修改属性值 code class Celsius ...
随机推荐
- Django组件(四) Django之Auth模块
Auth模块概述 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能 ...
- luoguP2826 LJJ的数学课
思路 把公式拆开维护两个值,一个a[i]的总和,一个a[i]*i的总和 也可以用树状数组维护,模板题 代码 #include <iostream> #include <vector& ...
- AtCoder 杂题训练
前言: 因为要普及了,今年没一等就可以退役去学文化课了,所以暑假把历年noip普及组都刷了一遍,离noip还有50+天,想弄点强化训练什么的. 想了想,就这些天学文化课之余有空就把AtCoder之前那 ...
- each遍历小结
JQ中的遍历函数 (逐个加工函数) 格式: $(‘.box p’).each(function(index,element){ })也可以写成 $.each(‘.box p’,function(ind ...
- java web项目启动进入首页的配置方式(包含过滤跳转首页实现)
本文为博主原创,未经允许不得转载: 项目启动成功,进入首页的方式,我们往往在web.xml 中通过以下的方式默认进入跳转首页, <welcome-file-list> <welcom ...
- /etc/fstab 文件解析
首先介绍一下fstab :这个文件描述系统中各种文件系统的信息.一般而言,应用程序仅读取这个文件,而不对它进行写操作.对它的维护是系统管理员的工作.在这个文件中,每个文件系统用一行来描述,在每一行中, ...
- R语言-attach、detach、with
在R语言中,对于串列,数据框中的数据的进行操作时,为了避免重复地键入对象名称,可使用attach或with. 1.attach() 假设data.frame包含列name,age attach(one ...
- centos7: vsftpd安装及启动: ftp配置(以虚拟用户为例)
centos7: vsftpd安装及启动: ftp配置 1安装: yum -y install vsftpd /bin/systemctl start vsftpd.service #启动 /bin/ ...
- codeforces 700a//As Fast As Possible// Codeforces Round #364(Div. 1)
题意:n个人要运动ll长,有个bus带其中几个人,问最短时间 最后所有人在同一时间到终点是用时最少的.由于搭bus相当于加速,每个人的加速时间应该一样.先计算bus走过的路程route.看第一个人被搭 ...
- C++&C#外挂(内存修改)
大学时候因为主修C#语言(当然现在做的是javaweb开发),那时在网上学了用C#做外挂的教程,外挂嘛,大家都懂的.这里只是低级的修改内存,不涉及到截获数据包.如果是欺骗服务器,修改服务器数据,那就难 ...