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 ...
随机推荐
- Android开发有用的三方网站
聚合数据-免费数据调用 https://www.juhe.cn/ 有赞- 免费的微商城 http://youzan.com/ 秀米微信图文编辑器 http://xiumi.us/ 禅道项目管理软件 h ...
- apache压缩页面, 全面加速网站
介绍: 网页压缩来进一步提升网页的浏览速度,它完全不需要任何的成本,只不过是会让您的服务器CPU占用率稍微提升一两个百分点而已或者更少. 原理: 网页压缩是一项由 WEB 服务器和浏览器之间共 ...
- Interleaving String——是否由两个string交叉、DP
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example,Given:s1 = ...
- TCP/IP协议(数据封装与拆装过程)
IP地址 = 网络地址+主机地址 = 网络地址 + 子网地址 + 主机地址 应用进程之间的通信被称之为端到端的通信. 传输层与网络层之间的区别:传输层为应用进程间提供了端到端的逻辑通信:网络层提 ...
- 在 Linux 多节点安装配置 Apache Zookeeper 分布式集群
规划: 三台物理服务器就形成了(法定人数).对于高可用性集群,您可以使用高于3的任何奇数.例如,如果设置5台服务器,则集群可以处理两个故障节点等. 物理服务器需要开启的端口 2888 , 3888 和 ...
- U盘EFI分区删不掉怎么办
方法/步骤 将U盘查到电脑上 点击[开始]找到并打开[Windows系统]的下拉按钮,找到[命令提示符] 在“命令提示符”上右键>[更多]>[以管理员身份运行]打开“管理员:命令提示符”窗 ...
- Arrays.asList引起的java.lang.UnsupportedOperationException解决方法
在项目中对List进行操作时报错java.lang.UnsupportedOperationException,后来发现操作的List是由数组转换而成的,通过看源码发现问题,并写测试程序如下. 代码块 ...
- UML类图简明教程
作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells Github:https://github.co ...
- linux下的显示有中国农历的日历ccal
1.linux下的显示有中国农历的日历ccal
- MySQL 原理性
1.MySQL的复制原理以及流程 (1).复制基本原理流程 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中: 2. 从:io线程——在使用start ...