效验器三类:

编程式——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. 备忘DES简单加密与解密

    package com.ego.util; import java.io.IOException; import java.security.SecureRandom; import javax.cr ...

  2. linux 系统性能分析

    CPU篇 top 1时,看各个cpu是否均衡:看每个cpu的使用率分布是否合理 看load average的负载( 1分钟.5分钟.15分钟前到现在的平均值) 看内存的使用 看进程数运行.休眠数 M看 ...

  3. Django模型层Meta内部类详解

    Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract      这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会对应 ...

  4. Python线程通信

    subprocess 作用 模块用于生产新的进程,连接到其输入.输出.错误管道,并获取其返回值 1. 如何使用subprocess模块 启动子进程的推荐方法是使用以下方便功能. 对于更高级的用例,当这 ...

  5. 记一次ifconfig命令

    由于Windows 10的强制更新,原来的Virtual box Host-Only驱动莫名奇妙的不见了,于是上网找各种解决方案: 1.重新生成虚拟网卡适配器:执行 VBoxManage.exe ho ...

  6. WAMPSERVER PHP版本5.3的降到 5.2?

    在这里下载5.2版本PHP,http://sourceforge.net/projects/wampserver/files/WampServer%202%20-%20Extensions/PHP/下 ...

  7. Orchard学习笔记

    1.下载Orchard sourcrs资源文件,同时也可以去百度下载中文包 资源地址(https://github.com/OrchardCMS/Orchard/releases/download/1 ...

  8. nsq

    官网:http://nsq.io (1)描述 都是message broker,rabbitmq久经考验,nsq则是后起之秀.rabbitmq是erlang编写,nsq是golang. 安装:http ...

  9. ChartDirector 6.0在MFC下乱码问题

    XYChart *c = new XYChart(640, 350); char buffer1[256] = ""; UnicodeToUtf8(L"Realtime ...

  10. windows下使用ffmpeg进行视频转换和截图。

    author:fanfq(xiaoban) Email:fangqing.fan#gmail.comlink:http://fanfq.iteye.com/admin/blogs/655569chan ...