效验器三类:

编程式——Java代码

声明式——xml

注释法——@

注解验证可以修饰属性的getter方法,
也可以修饰执行方法
Action中校验失败时,返回input逻辑视图

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>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />
<constant name="struts.configuration.xml.reload" value="true" />
<package name="p1" namespace="/" extends="struts-default">
<action name="*Action" class="org.ah.s2.C1" method="{1}">
<result name="success" type="dispatcher">
/inputMsg.jsp
</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>

Action:(没有:C1-validation.xml)

package org.ah.s2;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.validator.annotations.CustomValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
import com.opensymphony.xwork2.validator.annotations.IntRangeFieldValidator;
import com.opensymphony.xwork2.validator.annotations.ValidationParameter;
import com.opensymphony.xwork2.validator.annotations.Validations; public class C1 extends ActionSupport {
private String uname;
private String pwd;
private String pwd2;
private Date birth;
private int weight; public String getPwd() {
return pwd;
} public void setPwd(String pwd) {
this.pwd = pwd;
} public String getPwd2() {
return pwd2;
} public void setPwd2(String pwd2) {
this.pwd2 = pwd2;
} public Date getBirth() {
return birth;
} public void setBirth(Date birth) {
this.birth = birth;
} public int getWeight() {
return weight;
} public void setWeight(int weight) {
this.weight = weight;
} public void setUname(String uname) {
this.uname = uname;
} // 不能写在Model上
// set方法不能丢
// parameters是个数组,用{}包含
@RequiredStringValidator(trim = true, message = "必须输入名字")
@CustomValidator(type = "cn", parameters = { @ValidationParameter(name = "model", value = "all") }, message = "要中文")
public String getUname() {
return uname;
} @Validations(
  requiredStrings
= { @RequiredStringValidator(fieldName = "pwd", message = "密码必须输入") },
  intRangeFields = { @IntRangeFieldValidator(fieldName = "weight", min = "1", max = "300", message = "体重必须在${min}和${max}之间") }
  )
public String m1() {
return "success";
}
}

自定义效验器:

package org.ah.s2;

import java.util.regex.Matcher;
import java.util.regex.Pattern; import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; public class MyValidator extends FieldValidatorSupport {
private String model; public String getModel() {
return model;
} public void setModel(String model) {
this.model = model;
} @Override
public void validate(Object obj_i) throws ValidationException {
// 字段名
String fieldName = getFieldName();
// 字段值
Object fieldValue = getFieldValue(fieldName, obj_i); if (fieldValue instanceof String) {
String strV = (String) fieldValue;
/*
* 中文unicode none:无中文 all :全中文
*/
if ("none".equals(model)) {
// compile:编译
Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
Matcher m = p.matcher(strV); if (m.find()) {// 找到中文
// 效验失败(显示不出来,随便写写,不写不报错)
addFieldError(fieldName, obj_i);
}
} else if ("all".equals(model)) {
if (!Pattern.matches("[\u4e00-\u9fa5]+", strV)) {
// 不是全中文
addFieldError(fieldName, obj_i);// 效验失败
}
}
}
} }

src下配置自定义的效验器:

validators.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator Definition 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">
<validators>
<validator name="cn" class="org.ah.s2.MyValidator" />
</validators>

表示层:

index.jsp

    <s:form action="m1Action" method="post">
<s:textfield name="uname" label="用户名" />
<s:textfield name="pwd" label="密码" />
<s:textfield name="pwd2" label="确认密码" />
<s:textfield name="birth" label="生日" />
<s:textfield name="weight" label="体重" />
<s:submit value="提交"></s:submit>
</s:form>

inputMsg.jsp 略

运行结果:

Struts2:效验器——注解的更多相关文章

  1. Struts2:效验器——声明式

    就是用xml配置的方式,而不是Java代码的形式,那个是“编程式” Action: package org.ah.s2; import com.opensymphony.xwork2.ActionSu ...

  2. Struts2 拦截器配置以及实现

    @(Java ThirdParty)[Struts|Interceptor] Struts2 拦截器配置以及实现 Struts2的拦截器应用于Action,可以在执行Action的方法之前,之后或者两 ...

  3. Struts2框架之-注解开发

    Struts2主要解决了从JSP到Action上的流程管理,如何进行Uri和action类中每个方法的绑定这是重点,在这里先简单看一下配置文件中的简单配置: <span style=" ...

  4. 基于SSH2框架Struts2拦截器的登录验证实现(转)

        大象在这里假设你已经弄清楚了Struts2拦截器的基本概念,可以进入实际运用了.那么我们在之前的基础上只需要做下小小的改变,就可以使用Struts2的拦截器机制实现登录的验证.     修改数 ...

  5. Springmvc_validation 效验器

    springmvc-validation效验器的使用介绍 对于任何一个应用来说,都会做数据的有效性效验,但是只在前端做并不是很安全,考虑到安全性這个时候会要求我们在服务端也对数据进行有效验证,spri ...

  6. SpringMVC—Struts2拦截器学习网址整理

    引自:http://blog.csdn.net/wp1603710463/article/details/49982683 SpringMVC—Struts2拦截器学习网址整理 最近项目中遇到权限相关 ...

  7. struts2动态调用+Servlet过滤器+struts2拦截器

    周末真的是懒到心慌...... 本文是在完整s2sh项目基础上添加的,不太了解s2sh项目构建的朋友可以先参考一下这几篇文章: eclipse环境下基于tomcat-7.0.82构建struts2项目 ...

  8. struts2 拦截器

    拦截器:对Action的访问.可以拦截到Action中某个方法.与过滤器不同,过滤器过滤的是请求.过滤JSP.html.但是拦截器不能拦截jsp.html的访问. Struts2 拦截器在访问某个 A ...

  9. Struts2拦截器的使用 (详解)

    Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...

随机推荐

  1. JDBC向数据库中插入数据

    新建数据库,并插入相关数据. create database bbs; use bbs; create table article ( id int primary key auto_incremen ...

  2. 《Android深度探索HAL与驱动开发》第三章阅读心得

    Git是Linux内核代码对源代码进行管理的软件,他的各方面要优与其他同类的源代码管理软件. 安装Git后,查看Git文档在Linux下可以直接使用man命令看指令的帮助文档.安装git-doc后会安 ...

  3. html画布

    一.<canvas>标签 Html5 引入了一个新的<canvas> 标签,这个标签所代表的区域就好象一块画布,你的所有图形绘制最后都要在这块画布上呈现.有了这个标签,浏览器的 ...

  4. 最小的N个和

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 ...

  5. 《C专家编程》第一章——C:穿越时空的迷雾

    这一章讲的是C语言的发展史,包括它是多么不经意的诞生,而后又经历了早期C.K&C.ANSI C的各种阶段,直到它现在形成的这个样子.C语言从来不是一门完美的语言,所以它一直在发展,直到今日,它 ...

  6. Atom安装activate-power-mode插件(震动炫酷)

    1.下载安装Atom,地址:https://atom.io/ 2.下载安装activate-power-mode插件,地址:https://github.com/JoelBesada/activate ...

  7. [SimHash] find the percentage of similarity between two given data

    SimHash algorithm, introduced by Charikarand is patented by Google. Simhash 5 steps: Tokenize, Hash, ...

  8. Zookeeper

    Zookeeper有个客户端,可以上传文件数据.然后Zookeeper有一个数据结构.像一种树.Zookeeper的主要作用有:维护配置文件(实时更新),选举leader(选举机制),感知节点(数据结 ...

  9. JConsole监控远程Tomcat服务器

    为了解决内存溢出的问题,会用到一些监视内存的工具,jconsole这个工具在jdk1.7自带了.这个工具可以查看系统的堆,非堆,线程,等等的一些整体的情况,从而可以判断出系统的一个大概的性能情况. c ...

  10. 为模版设计师而生的Twig(下)-Twig使用指南

    原文地址:http://my.oschina.net/veekit/blog/276800 12. 模板继承 Twig最强大的部分是模板继承.模板继承允许你建立一个基本的"骨架"模 ...