一、校验器的配置风格

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内置校验器——完整实例代码的更多相关文章

  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. Go第八篇之包的使用

    Go 语言的源码复用建立在包(package)基础之上.Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,必须同样以包的方式进行引用,本章内容将 ...

  2. jsp拾遗

    JSP九大内置对象,七大动作,三大指令 https://blog.csdn.net/qq_34337272/article/details/64310849 JSP页面的静态包含和动态包含 https ...

  3. 获取Spring项目配置文件元素

    在开发中有时候要获取配置文件里的值,通常可以利用如下方式来读取: public class PropertyUtil { private static Properties p = new Prope ...

  4. Ubuntu上 配置Eclipse:安装CDT

    在最新的 Ubuntu Kylin 16.04 中安装了eclipse,在纠结了很久的网络问题之后,开始了eclipse的配置以便在上面运行ns3. 在官方网站上安装完 eclipse LUNA 之后 ...

  5. HDU 6121 Build a tree(完全K叉树)

    http://acm.hdu.edu.cn/showproblem.php?pid=6121 题意:给你一颗完全K叉树,求出每棵子树的节点个数的异或和. 思路: 首先需要了解一些关于完全K叉树或满K叉 ...

  6. ros python 重置位置

    #!/usr/bin/env python import rospy import math import sys import commands import yaml from tf import ...

  7. Django部署生产环境,静态文件不能访问404,以及图片不能访问403

    部署环境的搭建请看此博客https://blog.csdn.net/anifans9350/article/details/80145535 查看nginx.conf 文件, nginx文件(etc/ ...

  8. js 二进制转换为16进制数

    <!DOCTYPE html> <html> <head> <title>远程监控</title> </head> <bo ...

  9. JAVA类和对象创建

    面向对象 学习目标: 理解面向对象的编程思想 理解类与对象的关系 如何创建类与对象 方法重载 一:什么是面向对象编程(OOP) 面向对象编程(Object Oriented Programming,O ...

  10. threejs和particles.js

    particles.js 在线配置的东西: http://vincentgarreau.com/particles.js/ https://threejs.org/ http://thehuub.co ...