Struts2的验证通过配置xml或者注解的方式。依赖与validationheworkflow接口(被默认的拦截器桟引入)。validation接口执行验证并且创建一些列的错误域。workflow接口检查验证错误的状态,一旦发现,就默认返回"input",

先看一个简单的验证实例:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page import="java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>表单界面</title>
</head>
<body>
<s:form method="post" action="validationAction">
<s:textfield name="name" label="名字"/>
<s:textfield name="age" label="年龄"/>
<s:submit value="提交"></s:submit>
</s:form>
</body>
</html>
package com.fuwh.model;

import com.opensymphony.xwork2.ActionSupport;

public class ValidationAction extends ActionSupport{

    private static final long serialVersionUID = 1L;

    private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("execute the default method!!!");
return SUCCESS;
} }
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd"> <struts>
<!-- 开启debug模式,会自动加载配置文件等等,不用每次更改了配置文件就去重新启动下服务器 -->
<constant name="struts.devMode" value="true" /> <package name="validation" extends="struts-default">
<action name="validationAction" class="com.fuwh.model.ValidationAction">
<result name="success">success.jsp</result>
<!-- 必须要有input -->
<result name="input">index.jsp</result>
</action>
</package> </struts>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <!-- 配置验证器,文件和action类放在一个地方,命名为action的类名+"-validaiont.xml" -->
<validators>
<field name="name">
<field-validator type="requiredstring">
<message>年龄必须输入</message>
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<param name="min">12</param>
<param name="max">18</param>
<message>年龄只能在12到18岁之间</message>
</field-validator>
</field>
</validators>
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page import="java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Insert title here</title>
</head>
<body>
验证成功,返回的界面
</body>
</html>

执行结果:

从系统自带的验证器配置文件validators.xml文件可以看出,系统能够自带了以下的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator Config 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd"> <validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/> </validators>

自定义验证

  在struts2中要想实现验证,可以实现通过实现以下几个接口的方式来实现

  • com.opensymphony.xwork2.validator.validators.ValidatorSupport
  • com.opensymphony.xwork2.validator.validators.FieldValidatorSupport
  • com.opensymphony.xwork2.validator.validators.RangeValidatorSupport
  • com.opensymphony.xwork2.validator.validators.RepopulateConversionErrorFieldValidatorSupport

实例:

package com.fuwh.model;

public class Student {

    //首先编写一个学生实体类

    private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
} }<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page import="java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>表单界面</title>
</head>
<body>
<p>然后编写一个前台注册页面</p>
<s:fielderror></s:fielderror>
<s:form method="post" action="validationAction">
<s:textfield name="stu.name" label="名字"/>
<s:textfield name="stu.age" label="年龄"/>
<s:submit value="注册"></s:submit>
</s:form>
</body>
</html>
package com.fuwh.model;

import com.opensymphony.xwork2.ActionSupport;

public class ValidationAction extends ActionSupport{

    private static final long serialVersionUID = 1L;

    private Student stu;

    public Student getStu() {
return stu;
} public void setStu(Student stu) {
this.stu = stu;
}
//这是action的默认入口方法
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("execute the default method!!!-->>"+stu);
return SUCCESS;
} }
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd"> <struts>
<!-- 开启debug模式,会自动加载配置文件等等,不用每次更改了配置文件就去重新启动下服务器 -->
<constant name="struts.devMode" value="true" /> <!-- 配置action -->
<package name="validation" extends="struts-default">
<action name="validationAction" class="com.fuwh.model.ValidationAction">
<result name="success">success.jsp</result>
<!-- 必须要有input -->
<result name="input">index.jsp</result>
</action>
</package> </struts>
package com.fuwh.model;

import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; public class MyValidator extends FieldValidatorSupport{ @Override
public void validate(Object object) throws ValidationException {
// TODO Auto-generated method stub
String fieldName=this.getFieldName(); //取得字段名
String fieldValue=this.getFieldValue(fieldName, object).toString(); //取得字段值 if(fieldValue.indexOf("日")!=-1){
//添加错误信息
this.addFieldError(fieldName, object);
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator Config 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd"> <validators>
<!-- 这些是默认的验证器 -->
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/> <!--
将默认的validators.xml文件添加到classpath,然后在里面添加自己的验证器MyValidator
name:就是自己的验证器的名字,以后在action名-validation.xml文件中配置验证的时候需要使用
-->
<validator name="myvalidator" class="com.fuwh.model.MyValidator"/>
</validators>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <!-- 配置验证器,文件和action类放在一个地方,命名为action的类名+"-validaiont.xml" -->
<validators>
<field name="stu.name">
<!--
对名字字段,
同时使用系统自带的requiredstring来验证熊为空
和自定义的验证,来验证不能包含敏感词汇
-->
<field-validator type="requiredstring">
<message>年龄不能为空</message>
</field-validator>
<field-validator type="myvalidator">
<message>姓名不能包含敏感词汇</message>
</field-validator>
</field>
<field name="stu.age">
<field-validator type="int">
<param name="min">12</param>
<param name="max">18</param>
<message>年龄只能在12到18岁之间</message>
</field-validator>
</field>
</validators>

Struts2--验证框架的更多相关文章

  1. 关于struts2 验证框架在联网的时候可以用,不联网不起作用的问题

    这是一个让我很头痛的问题,我是在一个其他的项目框架的基础上来开发新的项目. 当使用struts验证框架时,突然发现这个验证不起作用了,我就纳闷了之前用这个开发的项目好好的怎么到我这就不能用了呢? xm ...

  2. Struts2验证框架_xml验证失败

    测试Struts2验证框架-->XML验证   启动tomcat后网页登录失败 Employee-validation.xml文件头如下: <!DOCTYPE validators PUB ...

  3. (七)Struts2 验证框架

    所有的学习我们必须先搭建好Struts2的环境(1.导入对应的jar包,2.web.xml,3.struts.xml) 第一节:Struts2 验证简介 Struts2 基于Struts2 拦截器,为 ...

  4. JavaWeb -- Struts2 验证框架

    1. 验证框架 示例 表单提交Jsp, reg.jsp <%@ page language="java" contentType="text/html; chars ...

  5. Struts2验证框架实例

    今天写了个Struts验证框架的实例,总算把验证框架弄清楚了. 上一篇Struts实例的action没有继承ActionSupport类,虽然也可以实现action的功能,但是却不能应用Struts提 ...

  6. struts2学习(11)struts2验证框架1.验证简介、内置验证

    一.Struts2验证简介: 二.struts2内置验证: 下面例子,需求是:为用户注册进行验证: com.cy.model.User.java: package com.cy.model; publ ...

  7. Struts2 验证框架 validation.xml 常用的验证规则

    validation.xml 的命名规则和放置路径: 文件名:<ActionClassName>-validation.xml <ActionClassName>就是要验证的A ...

  8. struts2验证框架

    如何做一个工号 用户 密码 验证登录页面? 答:1,先画一个login.jsp ,如何画呢?先引入Struts2标签库,利用Struts2标签库画登录页面:如下: 2,先进入useractiion,在 ...

  9. struts2验证框架1

    <!--该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts 2处理.如果用户需要指定多个请求后缀,则多个后缀之间以英文逗 ...

  10. struts2学习(12)struts2验证框架2.自定义验证

    一.例子需求: 对敏感词进行验证: 将struts包中的validators.xml文件拷贝一份到src目录下,在最后面添加自己的验证器: com.cy.validators.SensitiveWor ...

随机推荐

  1. .Net开发之旅(一个年少轻狂的程序员的感慨)

    高端大气上档次.这次当时一个身为懵懂初中生的我对程序员这一职位的描述.那时虽不是随处都能看到黑客大军的波及,但至少是知道所谓的黑客爸爸的厉害,一言不合说被黑就被黑.对于懵懂的我那是一种向往.自己也曾想 ...

  2. hackme.inndy.tw - pyyy - Writeup

    hackme.inndy.tw - pyyy - Writeup 0x01 反编译 1.第一次尝试的时候我直接在线反编译,部分结果如下. for (i, f) in enumerate(F): n = ...

  3. 高级软件工程2017第5次作业—— 团队项目:需求改进&系统设计

    Deadline:2017-10-23(周一) 21:00pm 注:以下内容参考 集大作业 1.评分规则: 按时交 - 有分,检查的项目包括后文的四个方面 需求&原型改进 - 20分 系统设计 ...

  4. 听翁恺老师mooc笔记(15)--文件的输入与输出

    <>重定向 如果使用标准的printf输出,有一个比较简便的方法,可以将程序的结果写入一个文件.使用<和>符号,将程序运行结果重定向到文件中去,具体使用到的代码如下: ./te ...

  5. C语言作业--函数

    一.PTA实验作业 题目1: 400-499 中4出现的次数 1. 本题PTA提交列表 2. 设计思路 一.main函数 1.函数声明int fun(int x) 2.定义变量i,k,i表示输入的值, ...

  6. SQL函数返回表的示例-Z

    create function [dbo].[GetOperateCustGroup] ( ), ) ) returns @TempTable table (MaxPrice float,MinPri ...

  7. Django 模版语法

    一.简介 模版是纯文本文件.它可以产生任何基于文本的的格式(HTML,XML,CSV等等). 模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签. {% extends "base ...

  8. Solr搜索引擎搭建详细过程

    1    什么是solr Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr可以独立运行在Jetty.Tomcat等这些Servlet容器中 ...

  9. JAVA_SE基础——56.包的创建

    接下来我来给大家讲下--包 , 先看一段代码 class Demo1{ public static void main(String[] args) { System.out.println(&quo ...

  10. NFS PersistentVolume - 每天5分钟玩转 Docker 容器技术(151)

    上一节我们介绍了 PV 和 PVC,本节通过 NFS 实践. 作为准备工作,我们已经在 k8s-master 节点上搭建了一个 NFS 服务器,目录为 /nfsdata: 下面创建一个 PV mypv ...