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 ...
随机推荐
- IP反查网站,ip反查接口,旁站查询接口大全,通过IP查域名汇总:
http://cn.bing.com/search?q=ip%3A220.181.111.85 http://dns.aizhan.com/?q=www.baidu.com http: ...
- jmeter之怎样减负-实现稳定超高并发測试(性能调优)
新浪围脖>@o蜗牛快跑o 在測试过程中,刚開始学习的人(也包含早期的我),使用工具不当,加入众多监控组件,很想看到实时报告.跑不了一会,jmeter就卡死甚至oom.仅仅得重新启动.之前的 ...
- Backup and Recovery Basics2
1.6.Automatic Disk-Based Backup and Recovery: The Flash Recovery Area 创建不同备份和恢复文件的组件对每一个文件系统的大小没有不论什 ...
- eclipse高速查找一个变量、方法或者类被引用的地方
近期不停debug,拿到一个变量之后总是要先概览一下才好下手,之前一直用Ctrl+F来做,太麻烦. 今天查了下eclipse使用,发现有快捷键,用法: 先双击要查看的变量.方法或者类,使之被选中,然后 ...
- iOS开发 - "Cast from pointer to smaller type 'int' loses information” 解决的方法
今天要写一个联系人搜索算法. 百度了下, 在code4App中找到相关代码. 可是自己跑了下, 发现报错. 错误内容例如以下: "Cast from pointer to smaller t ...
- 转:几款主流pcb软件比较
原理图设计软件:会ORCAD就可以了,支持的Netlist超多,基本是业界标准. PCB Layout 软件 1.Protel,现在推AltiumDesigner.国内低端设计的主流,国外基本没人 ...
- HDU 5056 Boring count(数学)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5056 Problem Description You are given a string S con ...
- 允许局域网内其他主机访问本地MySql数据库
mysql的root账户,我在连接时通常用的是localhost或127.0.0.1,公司的测试服务器上的mysql也是localhost所以我想访问无法访问,测试暂停. 解决方法如下: 1,修改表, ...
- Ubuntu/CentOS下源码编译安装Php 5.6基本参数
先确认安装libxml2 apt-get install libxml2 libxml2-dev或者yum install libxml2 libxml2-dev ./configure --pref ...
- eclipse maven安装配置
下载在Apache下载Maven,下载地址:http://maven.apache.org/download.html,在win7下载文件为:apache-maven-3.1.0-bin.zip. ...