Struts2 自定义输入校验 第五弹
Struts2的校验框架有两种:一种是validate方法,另一种是有效的xml文件。
Action中自定义方法的输入校验,对于通过action的method属性所指定的自定义方法myExecute,其对应的自定义输入校验方法名为validateMyExecute(假设自定义的方法名为myExecute),底层是通过反射机制来调用的。
当在Action中制定了自定义的excute方法时,首先会执行自定义的excute方法所对应的输入校验方法,然后再去执行validate方法,执行完毕后如果出现了任何错误都不会再去执行自定义的excute方法,流程会转向了input这个返回结果的页面上面。
自定义Field级别的错误提示消息
1)新建一个以action命名的properties文件,如RegisterAction.properties
2)然后在该属性文件中指定每一个出错的字段的错误消息。指定方式:invalid.fieldvalue.具体属性 = 具体错误提示信息
--start 自定义方法的校验 ---
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'register.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<h2><font color="blue">用户注册</font></h2> <s:actionerror cssStyle="color:red"/> ---------------------------------------- <s:fielderror cssStyle="color:blue"></s:fielderror> <!--
<form action="register.action"> username: <input type="text" name="username" size="20"><br>
password: <input type="password" name="password" size="20"><br>
repassword: <input type="password" name="repassword" size="20"><br>
age: <input type="text" name="age" size="20"><br>
birthday: <input type="text" name="birthday" size="20"><br>
graduation: <input type="text" name="graduation" size="20"><br> <input type="submit" value="submit"/> </form>
-->
<s:form action="register.action" theme="simple"> username: <s:textfield name="username" label="username"></s:textfield><br>
password: <s:password name="password" label="password"></s:password><br>
repassword: <s:password name="repassword" label="repassword"></s:password><br>
age: <s:textfield name="age" label="age"></s:textfield><br>
birthday: <s:textfield name="birthday" label="birthday"></s:textfield><br>
graduation: <s:textfield name="graduation" label="graduation"></s:textfield><br> <s:submit value="submit"></s:submit>
</s:form> </body>
</html>
register.jsp
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> </web-app>
web.xml
import java.util.Date; import com.opensymphony.xwork2.ActionSupport; public class RegisterAction extends ActionSupport
{
private String username; private String password; private String repassword; private int age; private Date birthday; private Date graduation; public String getUsername()
{
return username;
} public void setUsername(String username)
{
this.username = username;
} public String getPassword()
{
return password;
} public void setPassword(String password)
{
this.password = password;
} public String getRepassword()
{
return repassword;
} public void setRepassword(String repassword)
{
this.repassword = repassword;
} public int getAge()
{
return age;
} public void setAge(int age)
{
this.age = age;
} public Date getBirthday()
{
return birthday;
} public void setBirthday(Date birthday)
{
this.birthday = birthday;
} public Date getGraduation()
{
return graduation;
} public void setGraduation(Date graduation)
{
this.graduation = graduation;
} @Override
public String execute() throws Exception
{
System.out.println(this.birthday); return SUCCESS;
} public String myExecute() throws Exception
{
System.out.println("myExecute invoked!"); return SUCCESS;
} public void validateMyExecute()
{
System.out.println("validateMyExecute invoked!!");
} @Override
public void validate()
{
System.out.println("validate invoked!");
}
// @Override
// public void validate()
// {
// if(null == username || username.length() < 4 || username.length() > 6)
// {
// this.addActionError("username invalid");
//
// this.addFieldError("username", "\u7528\u6237\u540d\u4e0d\u5408\u6cd5");
// }
//
// if(null == password || password.length() < 4 || password.length() > 6)
// {
// this.addActionError("password invalid");
// }
// else if(null == repassword || repassword.length() < 4 || repassword.length() > 6)
// {
// this.addActionError("repassword invalid");
// }
// else if(!password.equals(repassword))
// {
// this.addActionError("the passwords not the same");
// }
//
// if(age < 10 || age > 50)
// {
// this.addActionError("age invalid");
// }
//
// if(null == birthday)
// {
// this.addActionError("birthday invalid");
// }
//
// if(null == graduation)
// {
// this.addActionError("graduation invalid");
// }
//
// if(null != birthday && null != graduation)
// {
// Calendar c1 = Calendar.getInstance();
// c1.setTime(birthday);
//
// Calendar c2 = Calendar.getInstance();
// c2.setTime(graduation);
//
// if(!c1.before(c2))
// {
// this.addActionError("birthday should be before graduation");
// }
// }
//
// //this.getFieldErrors().clear();
// //this.getActionErrors().clear();
//
//// this.clearActionErrors();
//// this.clearFieldErrors();
//
// System.out.println("invoked!!!");
// } }
RegisterAction
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'registerResult.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body> username: <s:property value="username"/><br>
password: <s:property value="password"/><br>
age:<s:property value="age"/><br>
birthday:<s:property value="birthday"/><br>
graduate:<s:property value="graduation"/>
</body>
</html>
registerResult.jsp
--end 自定义方法的校验 ---
自带的validateFailed 消息 是不明确的,需要自行修改。可以通过自定义属性文件实现(RegisterAction.properties,需要和action同路径)
invalid.fieldvalue.age=\u5E74\u9F84\u4E0D\u5408\u6CD5\!
invalid.fieldvalue.birthday=\u751F\u65E5\u65E5\u671F\u4E0D\u5408\u6CD5
invalid.fieldvalue.graduation=\u6BD5\u4E1A\u65E5\u671F\u4E0D\u5408\u6CD5
RegisterAction.properties
其中,invalid.fieldvalue.age中的invalid.fieldvalue是固定的,不可修改。
如果提示中文的消息native2ascii.exe 是将中文转化为ASCII码(在jdk/bin目录下面,如果转化直接输入中文敲回车即可!)

第二种校验方法:有效的xml文件,具体分为字段优先的和校验器优先的
需要将***-validation.xml的文件放置在对应的action路径下面。
比如如果要验证RegisterAction,则需要命名为:RegisterAction-validation.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators>
<!--
<field name="username">
<field-validator type="requiredstring">
<param name="trim">false</param>
<message>username can't be blank!</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">4</param>
<param name="maxLength">6</param>
<param name="trim">false</param>
<message key="username.invalid"></message>
</field-validator>
</field> <field name="password">
<field-validator type="requiredstring">
<message>password can't be blank!</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">4</param>
<param name="maxLength">6</param>
<message>length of password should be between ${minLength} and ${maxLength}</message>
</field-validator>
</field> <field name="age">
<field-validator type="required">
<message>age can't be blank!</message>
</field-validator>
<field-validator type="int">
<param name="min">10</param>
<param name="max">40</param>
<message>age should be between ${min} and ${max}</message>
</field-validator> </field> <field name="birthday">
<field-validator type="required">
<message>birthday can't be blank!</message>
</field-validator>
<field-validator type="date">
<param name="min">2005-1-1</param>
<param name="max">2007-12-31</param>
<message>birthday should be between ${min} and ${max}</message>
</field-validator>
</field> --> <validator type="requiredstring">
<param name="fieldName">username</param>
<message>username can't be blank!</message>
</validator> <validator type="stringlength">
<param name="fieldName">username</param>
<param name="minLength">4</param>
<param name="maxLength">6</param>
<message>length of username should be between ${minLength} and ${maxLength}</message>
</validator> <field name="birthday">
<field-validator type="required">
<message>birthday can't be blank!</message>
</field-validator>
<field-validator type="date">
<param name="min">2005-1-1</param>
<param name="max">2007-12-31</param>
<message>birthday should be between ${min} and ${max}</message>
</field-validator>
</field>
</validators>
RegisterAction-validation.xml
Struts2 自定义输入校验 第五弹的更多相关文章
- (十三)struts2的输入校验
输入校验是web应用必须处理的问题,要防止用户的误输入和恶意非法输入.struts2给我们提供了非常强大的输入校验体系. 输入校验分为客户端校验和服务器端校验.一般开发中两者都用,但是服务端校验必须使 ...
- Struts2的输入校验(2)——客户端校验
Struts2的输入校验(2) --客户端校验 Struts2客户端校验的使用: (1)使用Struts2的标签生成输入页面的表单: (2)为该<s:form>元素添加validate=& ...
- Struts2的输入校验(1)——校验规则文件的编写
Struts2的输入校验(1) --校验规则文件的编写 Struts2提供了基于验证框架的输入校验,所有的输入校验只要编写配置文件,Struts2的验证框架将会负责进行服务器校验和客户端校验. 注: ...
- Struts2框架(8)---Struts2的输入校验
Struts2的输入校验 在我们项目实际开发中在数据校验时,分为两种,一种是前端校验,一种是服务器校验: 客户端校验:主要是通过jsp写js脚本,它的优点很明显,就是输入错误的话提醒比较及时,能够减轻 ...
- JavaWeb框架_Struts2_(六)----->Struts2的输入校验
1. 输入校验章节目录 输入校验概述 客户端校验 服务器端校验 手动编程校验 重写validate方法 重写validateXxx()方法 输入校验流程 校验框架校验 Struts2 内置的校验器 常 ...
- Struts2 输入校验 第四弹
ActionSupport 里面有一个validate.可以重写里面你的方法. 校验执行流程: 1)首先进行类型转化 2)然后进行输入校验(执行validate方法) 3)如果在上述过程中出现了任何错 ...
- Struts2的输入校验
一.Struts2提供了基于验证框架的输入校验,在这种校验方式下,所有的输入校验只需要编写简单的配置文件,Struts2的验证框架将会负责进行服务器校验和客户端校验. 校验失败后将Struts2将自动 ...
- struts2 自定义类型转化 第三弹
1.Struts2的类型转化,对于8种原生数据类型以及Date,String等常见类型,Struts2可以使用内建的类型转化器实现自动转化:但对于自定义的对象类型来说,就需要我们自己指定类型转化的的方 ...
- struts2自定义声明校验器
1 //新建一个validators.xml在src根资源下,会覆盖default.xml的validators,所以你懂得 //接着,若使用声明式校验,则要把配置文件xxxAction-valida ...
随机推荐
- 【X240 QQ视频对方听不到声音】解决方法
[X240 QQ视频对方听不到声音]解决方法: win7为例: 右键点击右下角的"小喇叭"图标,点击"录音设备",显演示样例如以下图: watermark/2/ ...
- 【Python】使用类和实例
Car类 class Car(): '''模拟汽车''' def __init__(self,name,model,year): '''初始化汽车的属性''' self.name = name sel ...
- .NET面试题汇总
目录 本次给大家介绍的是我收集以及自己个人保存一些.NET面试题 简介 1.C# 值类型和引用类型的区别 2.如何使得一个类型可以在foreach 语句中使用 3.sealed修饰的类有什么特点 4. ...
- python中executemany的使用
conn = MySQLdb.connect(host = “localhost”, user = “root”, passwd = “password”, db = “myDB”, charset= ...
- C语言 包含结构的结构
一个结构体的成员是另一个结构体 代码: # include <stdio.h> # include <stdlib.h> struct data { int year; int ...
- 移动app性能测试(待完善)
移动终端性能测试是测试手机终端是否符合特定性能指标的测试,包括有:内存.CPU.电量.流量.流畅度.时延等 测试准备:测试账号.测试需求.测试用例.待测手机.待测应用包.测试工具.测试电脑 1. 时 ...
- ASP.NET数据库连接字符串的加密与解密
ASP.NET web.config中,数据库连接字符串的加密与解密. 虽然不怎么新鲜,但相信还是有许多人不知道,好,不说废话,直接给方法:开始--->运行,输入cmd,接着输入以下内容 加密: ...
- Map输出数据的处理类MapOutputBuffer分析
MapOutputBuffer顾名思义就是Map输出结果的一个Buffer,用户在编写map方法的时候有一个参数OutputCollector: void map(K1 key, V1 value, ...
- 11 linux nginx上安装ecshop 案例
一: nginx上安装ecshop 案例 (1)解压到 nginx/html下 浏览器访问:127.0.0.1/ecshop/index.php 出现错误:not funod file 原因:ngin ...
- andeoid硬件解码
Finally, I must say, finally, we get low-level media APIs in Android, the Android hardware decoding ...