ActionSupport类实现了Validateable、ValidationAware接口,

其中Validateable接口就是验证器接口,该接口有一个validate()方法,

validate()方法专门用来验证数据,实现的时候需要继承ActionSupport类,

所以编写一个Action类时重写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、编写视图组件(register1.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="register1" 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:textfield name="userAge" label="年龄" size="16" />
</td>
</tr>
<tr>
<td>
<s:textfield name="userTelephone" label="电话" size="16" />
</td>
</tr>
<tr>
<td>
<s:submit value="提交" />
</td>
</tr>
</table>
</s:form>
</center>
</body>
</html>

3、编写业务控制器Action类(RegistAction1.java)

   这里重写了validate()方法

package validatorAction;

import com.opensymphony.xwork2.ActionSupport;

public class RegistAction1 extends ActionSupport{

    private String userName;
private String userPassword;
private int userAge;
private String userTelephone; 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 int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
public String getUserTelephone() {
return userTelephone;
}
public void setUserTelephone(String userTelephone) {
this.userTelephone = userTelephone;
} //重写validate()方法
public void validate(){
if(userName==null||userName.length()<6||userName.length()>16){
addFieldError("userName","用户姓名的长度不符合要求,6~16位!");
}
if(userPassword.length()<6||userPassword.length()>16){
addFieldError("userPassword","密码的长度不符合要求,6~16位!");
}
if(userAge>130||userAge<1){
addFieldError("userAge","年龄不符合要求,1~130岁");
}
if(userTelephone.length()!=8){
addFieldError("userTelephone","电话号码不符合要求,8位");
}
} public String execute(){
return "success";
} }

4、struts.xml配置对应的action(name="register1")

<?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">
<interceptors>
<interceptor name="replace" class="interceptor.MyInterceptor" ></interceptor>
</interceptors> <action name="public" class="interceptor.PublicAction">
<result name="success">/success.jsp</result>
<result name="login">/success.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="replace"></interceptor-ref>
</action> <action name="register1" class="validatorAction.RegistAction1">
<result name="input">/validate/register1.jsp</result>
<result name="success">/validate/success1.jsp</result>
</action> <action name="register2" class="validatorAction.Register2Action">
<result name="input">/validate/register2.jsp</result>
<result name="success">/validate/success2.jsp</result>
</action> </package> </struts>

Struts2的手工自定义验证--完整实例代码的更多相关文章

  1. Struts2内置校验器——完整实例代码

    一.校验器的配置风格 1.字段校验器: <field name="被校验的字段"> <field-validator type="校验器名"& ...

  2. Netty实现SSL双向验证完整实例

    Netty实现SSL双向验证完整实例 博客分类: netty nettyssl自签证书  一.证书准备 要使用ssl双向验证,就必须先要生成服务端和客户端的证书,并相互添加信任,具体流程如下(本人调试 ...

  3. Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)

    本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解. 下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端. 代码的所有说明,都直接作为 ...

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

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

  5. Struts2国际化——完整实例代码

    一.介绍 国际化Internationalization的首末字符I和N之间字符数是18,简称I18N “国际化”是指一个应用程序在运行时,能够根据客户端请求所来自国家或地区语言的不同,而显示不同的语 ...

  6. (转)Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)

    原文出自:http://blog.csdn.net/anxpp/article/details/51512200 1.BIO编程 1.1.传统的BIO编程 网络编程的基本模型是C/S模型,即两个进程间 ...

  7. jQuery无刷新分页完整实例代码

    在线演示地址如下: http://demo.jb51.net/js/2015/jquery-wsx-page-style-demo/ <!DOCTYPE html> <head> ...

  8. 【WCF安全】使用X509证书自定义验证

    接触WCF时间比较短,在项目中要使用X509证书,纠结好几天终于有了结论,因此为了方便日后查阅和园友交流特意单独将部分代码提出,并做以记录. 1.准备工作 制作X509证书,此处用到三个证书名称 导入 ...

  9. MVC2 扩展Models和自定义验证(学习笔记)

    当我们利用Visual Studio生成实体类以后,难免会用到验证功能(例如,用户登录时验证用户名是否为空,并加以显示). Visual Studio实体类:实体类 如果直接去编辑Visual Stu ...

随机推荐

  1. windows10下cygwin安装神器apt-cyg

    一.背景 需要在cygwin下安装一些库 二.安装 2.1获取apt-cyg源码 git clone https://github.com/transcode-open/apt-cyg.git 2.2 ...

  2. UVA 3942 Remember the Word (Trie+DP)题解

    思路: 大白里Trie的例题,开篇就是一句很容易推出....orz 这里需要Trie+DP解决. 仔细想想我们可以得到dp[i]=sum(dp[i+len[x]]). 这里需要解释一下:dp是从最后一 ...

  3. php跨域

    <?php header('Content-type:text/html; charset="utf-8"'); $url = 'http://10.32.41.194:80 ...

  4. 从nodejs到在线商城

    nodejs安装express开发框架 (开发环境:mkdir nodeshop && cd nodeshop > npm init > npm install expre ...

  5. python 字符串输出转义{}

    >>> print ("{} 对应的位置是 {{0}}".format("runoob")) runoob 对应的位置是 {}

  6. Jmeter自动化测试 数据驱动测试,将数据存入csv文件中来调用,或将数据存在DB中进行调用

    1. 将测试的用例名称,测试请求方式,测试链接,预置数据,断言等都放到excel中,然后转成csv格式,在用Jmeter带的csv数据配置文件导入 运行之前将线程组中配置,线程数设置为1,循环的次数设 ...

  7. MVC 枚举绑定 DropDownList

    /// <summary> /// 枚举转化下拉列表数据集 /// </summary> /// <param name="type">类型&l ...

  8. css 键盘

    <html lang="en"> <head> <meta charset="UTF-8"> <title>Do ...

  9. android开发:Android 中自定义View的应用

    大家好我们今天的教程是在Android 教程中自定义View 的学习,对于初学着来说,他们习惯了Android 传统的页面布局方式,如下代码: <?xml version="1.0&q ...

  10. 重构 MVC; 代码分享工具(重构,改进,打分)

    include 模块和 extend 模块的不同:   Class Extension: 通过向singleton class中加入Module来定义class method,是对象扩展的一个特例. ...