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)。如果输入的数据经内置验证器验证成功,跳转到success1.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)验证成功页面(success1.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/success1.jsp</result>
        </action>
    </package>
</struts>

5、内置验证器的验证文件

<?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>

如果验证失败:

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

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

时间: 2024-12-10 08:32:54

Struts2内置校验器的实例的相关文章

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

一.Struts2内置拦截器 Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特 性.这些内置的拦截器在struts-default.xml中配置.只有配置了拦截器,拦截器才可以正常的工作和运行.Struts 2已经为您提供丰富多样的,功能齐全的拦截器实现.大家可以至struts2的jar包内的struts-default.xml查看关于默认的拦截器与 拦截器链的配置.内置拦截器虽然在struts2中都定义了,但是并不是都起作用的.因为并不是所有拦截器都被加

Struts2内置拦截器的简要介绍

标记有(*)要着重了解: (1)alias(别名拦截器):允许参数在跨越多个请求时使用不同别名,该拦截器可将多个Action采用不同名字链接起来,然后用于处理同一信息. (2)autowiring(自动装配拦截器):主要用于当Struts2和Spring整合时,Struts2可以使用自动装配的方式来访问Spring容器中的Bean. (3)(*)chain(链拦截器):构建一个Action链,使当前Action可以访问前一个Action的请求信息,一般和<result type="chai

property内置装饰器函数和@name.setter、@name.deleter

# property # 内置装饰器函数 只在面向对象中使用 # 装饰后效果:将类的方法伪装成属性 # 被property装饰后的方法,不能带除了self外的任何参数 from math import pi class Circle: def __init__(self, r): self.r = r def perimeter(self): return 2 * pi * self.r def area(self): return pi * self.r**2 * pi c1 = Circle

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

介绍一下struts2内置帮我们封装好的处理结果方式也就是底层源码分析 这是我们的jar包里面找的位置目录 打开往下拉看到result-type节点 name那一列就是我们的type类型取值 上一篇博客在分析的时候发现就算不写也会自动转发原因在这里,default=true 选择了默认方式 接着我们如果想看看底层是如何工作的就选择class属性复制双引号的内容 接着按住ctrl+shift+T就能出现一个框 OPen Type 进去之后发现是这个,点击Attach Source---->选择第二

python基础--定义装饰器(内置装饰器)

装饰器的定义: 装饰器本质上就是一个python函数,它可以让其它函数在不需要做任何代码改动的前提下增加额外的功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景中,比如-- >插入日志.性能测试.事务处理.缓存.权限校验等场景.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同的代码并且可以重复使用. 装饰器的作用: 就是为已经存在的函数或者对象添加额外的功能 装饰器的写法: (无参装饰器) def wrapper(func): def inn

python内置装饰器@property

前言 今天来说一下@property装饰器,这是个python内置的装饰器,主要是作用是把类中的一个方法变为类中的一个属性,并且使定义属性和修改现有属性变的更容易 我们可以看一下@property源码中给的实例和解释 1 Decorators make defining new properties or modifying existing ones easy: 2 3 4 class C(object): 5 @property 6 def x(self): 7 "I am the 'x'

ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)

原帖地址:http://www.cnblogs.com/QLeelulu/archive/2008/10/13/1310419.html 前一篇中我们已经了解了Action Filter 与 内置的Filter实现,现在我们就来写一个实例.就写一个防盗链的Filter吧. 首先继承自FilterAttribute类同时实现IActionFilter接口,代码如下: /// <summary> /// 防盗链Filter. /// </summary> public class An

Unity 内置着色器(转)

Unity包括超过40种内置的shader. 标准着色器家族 Normal Shader Family 这些着色器都是Unity基本的着色器.适用于大多数的不透明物体,如果想要物体有透明.发光效果等,它们并不适用. Vertex Lit 顶点光照着色器 Assets needed 资源需要: One Base texture, no alpha channel required  一个基本纹理,无alpha通道 Diffuse 漫反射着色器 Assets needed 资源需要: One Bas

[转]ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)

前一篇中我们已经了解了Action Filter 与 内置的Filter实现,现在我们就来写一个实例.就写一个防盗链的Filter吧. 首先继承自FilterAttribute类同时实现IActionFilter接口,代码如下: /// <summary>/// 防盗链Filter./// </summary>public class AntiOutSiteLinkAttribute : ActionFilterAttribute, IActionFilter{    public