- 浏览: 523528 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (422)
- 重要 (12)
- BUG解决备忘录 (32)
- 环境搭建 (17)
- 开源组件 (4)
- 数据库 (16)
- 设计模式 (4)
- 测试 (3)
- javascript (5)
- Android (14)
- jdk相关 (9)
- struts2 (10)
- freemark (3)
- 自定义扩展及工具类 (5)
- jdk5新特性及java基础 (13)
- ssh及其他框架 (15)
- linux (32)
- tcp-ip http协议 (8)
- 服务器集群与负载均衡 (34)
- 项目管理相关 (11)
- 实用小技术 (10)
- 架构相关 (14)
- firefox组件 (11)
- spider (6)
- 产品设计 (11)
- PHP (1)
- ws (4)
- lucene (10)
- 其他 (2)
- BI (1)
- NoSQL (3)
- gzip (1)
- ext (4)
- db (6)
- socket (1)
- 源码阅读 (2)
- NIO (2)
- 图片处理 (1)
- java 环境 (2)
- 项目管理 (4)
- 从程序员到项目经理(一):没有捷径 (1)
- bug (1)
- JAVA BASE (8)
- 技术原理 (0)
- 新框架新技术 (1)
- 量化与python (1)
- 系统编程 (0)
- C语言 (0)
- 汇编 (0)
- 算法 (0)
最新评论
-
hyspace:
别逗了,最后一个算法根本不是最优的,sort(function ...
数组去重——一道前端校招试题 -
washingtin:
楼主能把策略和路由的类代码贴出来吗
Spring + iBatis 的多库横向切分简易解决思路 -
sdyjmc:
初略看了一下,没有闹明白啊,均衡负载使用Nginx,sessi ...
J2EE集群原理 I -
shandeai520:
谢谢大神!请教大神一个问题:假如我有三台服务器,连接池的上限是 ...
集群和数据库负载均衡的研究 -
hekuilove:
给lz推荐一下apache commonsStringUtil ...
request 获取 ip
http://code.google.com/p/tomcatmonitor/downloads/detail?name=quickvalidemo.zip
目录
和RapidValidation配合实现前后台一致验证... 7
简介
本框架主要是为了和前台基于JavaScript的开源验证框架RapidValidation使用统一的验证规则, 最大限度的减少重复的后台验证代码, 使用方式简便, 扩展方便.
本框架依赖于:
Struts 2
Java 5或者更高版本
GET/POST协议(支持带文件上传的表单, 依赖于Commons-Upload组件)
整合步骤
1. 将文件struts2-quickvalidation-plugin-1.0.jar 放入WEB-INF/lib目录下;
2. 修改您自己的代码的src/struts.xml中的package定义继承自quickValidation;
示例代码:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="test" namespace="" extends="quickValidation "> <action name="helloworld" class="actions.HelloWorldAction"> <result name="index">/index.jsp</result> <result name="success">/helloworld.jsp</result> </action> </package> </struts> |
3. 使用注解加入验证规则表达式;
在每个需要调用的Action的入口方法处, 加入@FormValidator 注解.
注解的完整语法如下:
@common.validation.FormValidator(input="出错时需要返回的result别名", enabled=true/false , value="表单参数名称1,表单参数中文提示信息1,规则1 规则2…; 表单参数名称2,表单参数中文提示信息2,规则1 规则2…;更多字段验证信息")
input 参数: 可选 . 如果不指定, 则出错时仍然继续进入到Action方法中; 如果指定, 则在表单验证出错时, 返回到给定的result中, 例如: 原始表单输入页面或者统一的错误输出页面;
enabled 参数: 可选 . 是否启用此验证规则, 如果不指定, 则忽略解析注解, 不进行任何验证;
value 参数: 必填选项 , 可输入一个或者多个表单参数验证规则. 简单说就是: [字段1验证配置];[字段2验证配置];…. 虽然不建议, 然而字段验证配置可以留空, 此时不会进行任何验证处理.
而每个验证配置 的格式如下:
表单参数名称: 必填选项 . 指向输入的表单控件的名称(input的name);
表单参数中文提示信息: 可选 . 如果为空, 则和表单参数名称相同. 不为空时, 则显示在出错时的信息提示的开头位置;
规则1 规则2…: 可选. 理论上可加入任意多个验证规则, 以单个空格 隔开. 在验证开始后, 依次进行每个规则的验证并加入提示信息. 需要注意的是, 除required规则之外的所有规则只有当用户输入的字段值非空时, 才进行有效性验证, 如此便可避免所有字段都成为必填字段的问题发生.
每个规则 本身则由两部分组成: 规则名-规则子名-参数1-参数2-参数3-….
规则名和规则子名是固定名称, 不能任意填写, 这两个名称对应一个具体的规则实现类.
其中参数 是必填选项 , 参数的意义则需要参考下一节的验证规则表达式 中的说明. 下面举例说明若干验证规则:
required 这是特殊规则, 不带规则子名;
float-range-1-20 其中float-range分别是规则名和规则子名, 而1和20则分别是两个参数.
特别需要注意的是有负数时的情况此时参数列表变为: float-range--1 --20, 此时参数值分别为-1和-20.
如果需要给另一字段加入验证规则, 则以分号 隔开.
下面是若干验证的示例及其解释:
规则 |
解释 |
@FormValidator |
空的验证规则, 不进行任何操作 |
@FormValidator("username,用户名,required min-length-5") |
对username字段进行验证, 规则为 必填, 最小长度为5; 出错时分别提示: 用户名不能为空 用户名的长度不能小于5, 当前长度为1. 由于没有指定input参数, 所以当验证失败时, 仍然会继续进入到业务逻辑处理, 相关的错误信息则存入request的attribute中. |
@FormValidator("username, ,required min-length-5") |
由于没有指定字段的中文提示, 因此出错时将提示: username的长度不能小于5, 当前长度为1. |
@FormValidator(input="index" ,value=" username,用户名,required min-length-5”) |
这大概是最常用格式的验证规则的写法了. 此例和上例的区别为: 所以当验证失败时, 将进入input参数所指定的出错信息显示页面. |
@FormValidator(input="index",enabled=false, value=" username,用户名,required min-length-5”) |
忽略所有验证规则处理, 常用于调试阶段. |
@FormValidator(input="index",value=" username,用户名,required min-length-5;password2,重复密码 ,required equals-password-原始密码 ;”) |
此规则加入了对重复密码字段的验证, 出错时将提示: 重复密码 和原始密码 的输入不一致 |
@FormValidator(input="index",value="username,用户名,required min-length-5;password2,重复密码 ,required equals-password;”) |
此规则省略了另一字段的中文描述, 出错时将提示: 重复密码 和前面 的输入不一致 |
以下为一个完整的Action类示例代码:
import com.opensymphony.xwork2.ActionSupport; import common.validation.FormValidator; public class HelloWorldAction extends ActionSupport { @FormValidator(input="index", value="username,用户名,required min-length-5 max-length-10 validate-alpha;" + "age,年龄,validate-digits min-value-18 max-value-100;password,密码,required;" + "password2,重复密码,required equals-password-原始密码;" + "gender,性别, validate-one-required") public String execute() throws Exception { return SUCCESS ; } } |
4. 修改前台显示验证结果.
根据Action的不同, 前台的显示划分为两类:
普通的错误显示:
所有错误信息: ${validationErrors} |
返回的内容是一个字符串, 显示了所有的出错信息, 而出错字体的颜色则需要用户自己去设置.
出错信息的显示格式是以<br>分开的, 例如:
用户名不能为空<br>密码不能为空<br>重复密码不能为空<br>性别必须至少选中一项<br> |
另一种推荐的做法是让Action继承自Struts2中的ActionSupport, 此时则可用Struts 2的标签来显示出错信息, 可定位到具体的字段:
<%@ taglib prefix="s" uri="/struts-tags" %> <s:actionerror /> <s:fielderror/> <s:form action="helloworld.action" method="post"> <s:textfield name="username" label="用户名" /> <s:password name="password" label="密码" /> <s:submit/> </s:form> |
或者使用纯JSP来编写页面来定位到单条错误:
用户名: <input name=username value=${param.username}> ${errors.username[0]} |
下面给出这两种写法的完整示例:
<%@ page pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <style> .errorMessage {color:red;} .errorLabel {font-weight:bold} </style> <title>测试页面</title> </head> <body> <s:actionerror /> <form action="helloworld.action" method=post enctype="multipart/form-data"> 用户名: <input name=username value=${param.username}> ${errors.username[0]} <br> 年龄: <input name=age value=${param.age}><br> 密码: <input name=password><br> 密码重复: <input name=password2><br> 邮件: <input name=email><br> 性别: <input type=checkbox name=a>男 <input type=checkbox name=a>女<br> IP地址: <input name=ip><br> 数字1: <input name=num1> 数字2: <input name=num2> <br> 日期:<input name=date><br> 附件: <input name=file type=file><br> <input type=submit value="提交"> </form> <span class="errorMessage"> ${validationErrors} </span> Struts 2表单标签示例: <s:fielderror/> <s:form action="helloworld.action" method="post"> <s:textfield name="username" label="用户名" /> <s:password name="password" label="密码" /> <s:submit/> </s:form> </body> </html> |
验证规则表达式详解
说明: 加红色背景的部分是目前尚不支持的验证规则; 加黄色背景的是增加了第二个可选参数的规则.
验证表达式 |
描述 |
示例 |
required |
非空域,全部空格也算空 |
|
validate-number |
一个有效数 |
|
validate-digits |
只能包含0-9任意个数字 |
|
validate-alpha |
只能是字母a-z, A-Z |
|
validate-alphanum |
只能是字母和数字的组合 |
|
validate-email |
只能是有效的email |
|
validate-url |
只能是有效的url地址 |
|
validate-one-required |
至少有一个被选中,例如一组checkbox, radiobutton,它们最好包含在一个div和span中 |
|
validate-integer |
只能是整数,可以有正负号 |
|
validate-ip |
有效的IP地址 |
|
min-length-$number |
最小长度是$number ( 此处$some表示一个特定的值) |
最小长度为8: min-length-8 |
max-length-$number |
最大长度是$number |
最大长度为8: max-length-8 |
max-value-$number |
输入域的最大值是$number |
最大值为8.1: max-value-8.1 |
min-value-$number |
输入域的最小值是$number |
最大值为-8.1: max-value--8.1 |
equals-$otherInputId-$otherInputLabel |
必须和某个input field相等,用于密码两次输入验证等,$otherInputLabel是可选项,用来描述另一字段信息 |
equals-password 重复密码和原始密码输入不一致: equals-password-原始密码 |
less-than-$otherInputId-$otherInputLabel |
小于某个input field less-than-otherInputId,多用于结束日期不能小于开始日期的需求,$otherInputLabel是可选项,用来描述另一字段信息 |
注:相等时也不能通过 |
great-than-$otherInputId-$otherInputLabel |
大于某个input field less-than-otherInputId,$otherInputLabel是可选项,用来描述另一字段信息 |
|
validate-date-$dateFormat |
只能是日期,$dateFormat为日期格式,$dateFormat的可选,默认格式为yyyy-MM-DD |
validate-date-yyyy年MM月dd日 |
validate-file-$type1-$type2-$typeX |
验证文件输入域选择的文件类型只能为声明的$type1 – $typeX中的一种 |
validate-file-png-jpeg |
float-range-$minValue-$maxValue |
必须是$minValue到$maxValue的一个浮点数 |
1至20: float-range-1-20 |
int-range-$minValue-$maxValue |
必须是$minValue到$maxValue的一个整数 |
|
length-range-$minLength-$maxLength |
输入字符串的长度必须在$minLength到$maxLength之间 |
|
validate-pattern-$RegExp |
通过自定义正则表达式$RegExp来验证输入域的正确性 |
vaidate-pattern-/a/gi |
validate-chinese |
只能是中文(以下为中国的相关验证) |
|
validate-phone |
有效的电话 |
|
validate-mobile-phone |
有效的手机号 |
|
validate-id-number |
验证是否有效的身份证号码 |
|
validate-zip |
验证邮政编码 |
|
validate-qq |
验证QQ号码 |
和RapidValidation 配合实现前后台一致验证
RapidValidation是专注于前台的验证框架, 例如下面的例子:
<!-- 为form增加required-validate class,标识需要验证form --> <form id='helloworld' action="#" class='required-validate'> helloworld: </br> <!--通过class添加验证: required表示不能为空,min-length-15表示最小长度为15 --> <textarea name='content ' class='required min-length-15 '></textarea></br> <input type='submit' value='Submit'/> <input type='reset' value='Reset'/> </form> |
其对应的后台验证规则为:
@FormValidator(input="index" ,value=" content ,helloworld ,required min-length-15 ”) |
请注意比较异同, 不同部分已经以红色粗体 进行了区分, 相同部分则以绿色粗体 标识.
大家可以看到, 两者很容易就实现了一致的前后台验证规则.
如何扩展验证规则?
要扩展验证只需要实现IValidator即可即可, 并将实现类放入包 common.quickvalid.validators 下. 下面是IValidator 接口定义:
package common.quickvalid.validators; import java.util.Map; /** * 验证器接口. * @author beansoft * 日期: 2009-12-20 */ public interface IValidator { /** * 实现验证方法. * @param fieldName 字段name * @param fieldDescription 出错时的字段描述信息 * @param params 参数列表 <String key, String[] values> 表单参数Map * @param args 参数列表 * @return 验证信息, 为空时表示没有任何出错信息, 通过验证 */ public String doValidation(String fieldName, String fieldDescription, Map<String, String[]> params, String... args) ; public String[] getArgs(); /** * 设置参数列表 * @param args */ public void setArgs(String[] args); public String getExpression(); /** * 设置原始表达式, 用于日期, 正则等验证方式, 避免和 - 号冲突. * @param Expression */ public void setExpression(String expression); } |
类名有一定规则, 将第一个减号替换为下划线即可, 例如:
length-range-$minLength-$maxLength 对应的类名是: length_range .
下面则给出一个实现类, 供参考:
package common.quickvalid.validators; import java.util.Map; /** * 单个表单域验证 * * 非空域时才进行字符串验证. * 最大长度验证 * @author beansoft * */ public class max_length implements IValidator { public String doValidation(String fieldName, String fieldDescription, Map<String, String[]> params, String... args) { super .setParams(params); String value = params.getValue(fieldName)[0]; int length = 0; try { length = Integer.parseInt (args[0]); } catch (Exception ex) {} if (value != null && value.length() > 0 && value.trim().length() > 0) { if (value.trim().length() > length) { return fieldDescription + "的长度不能大于" + length + ", 当前长度为" + value.trim().length(); } } return null ; } /** 忽略getter和setter,和普通Java类无区别. getXx(); setXxx(); */ } |
完整示例应用
请参考项目quickvalidemo
, 可在MyEclipse6.0或者更高版本中执行.
http://www.blogjava.net/beansoft/archive/2009/12/22/306868.html#_Toc249167384
评论
如果字段 A 等于1或2的时候,B才不能为空,否则可以为空。
这样的逻辑,应该怎么写呢。麻烦给说明一下。
等待。。。
方法一:扩展源码 增加逻辑功能(不是特别好加)
方法二:逻辑写在程序中,把结果启动信息回调接口。
如果字段 A 等于1或2的时候,B才不能为空,否则可以为空。
这样的逻辑,应该怎么写呢。麻烦给说明一下。
等待。。。
发表评论
-
Struts2 文件上传 之 文件类型 allowedTypes
2010-12-12 16:03 1172'.a' : 'applicatio ... -
struts2 注释配置
2010-12-09 00:04 1768<struts> <include f ... -
Struts2+Spring+Hibernate整合(续Struts2+Spring整合)
2010-12-07 19:55 1205前面已经讲述了Struts2+Spring整合,这里我们接着整 ... -
Struts2+Spring整合
2010-12-07 19:52 856Struts2和Spring整合,创建一个OA工程 1、 ... -
struts 2 中增加拦截器
2010-11-19 02:48 1128吃完午饭了,公司食堂真垃圾,点了份白切鸡 尽是鸡皮和鸡脖子,就 ... -
struts 2中当SESSION过期后返回登陆页面
2010-11-19 02:04 1242在struts2+spring+hibernate 的体系中, ... -
struts2 消息提示或错误提示
2010-09-07 00:33 1772>>action中调用 this ... -
Struts2 标签应用
2010-08-28 12:57 787<%@ taglib prefix="c&qu ... -
struts2 annotation 配置
2010-08-26 22:58 1607>> ------ ...
相关推荐
- **最快速的后台表单验证**:相比于传统的验证方法,Struts2极速表单验证框架能够极大提升表单验证的处理速度。 - **简洁、快速的验证语法**:采用直观的语法结构,简化了验证规则的定义过程。 - **无需手动编写...
在"Extjs+Struts2系统后台管理框架"中,"新闻列表"功能通常涉及到以下几个关键知识点: 1. **数据展示**:使用ExtJS的GridPanel组件显示新闻列表,支持分页、排序、过滤等功能。数据通过Ajax请求从Struts2 Action...
下面将详细解释Struts2中的Validation框架及其在前后台验证中的应用。 首先,让我们了解一下Validation框架的基本概念。Struts2的Validation框架主要负责验证Action类中的方法参数,通过定义一个或多个validate()...
Validator是Struts2提供的一种强大的数据验证机制,用于在后台进行用户输入的检查,确保数据的有效性和安全性。在"struts2_1.7_validator"这个压缩包中,可能包含了实现Struts2用户登录验证的示例代码。 Struts2的...
而自动验证则是利用Struts2的内置验证框架,根据配置文件自动进行数据校验。 **手动验证**: 1. 创建自定义拦截器:首先,我们需要创建一个继承自`com.opensymphony.xwork2.interceptor.AbstractInterceptor`的类,...
Struts2使用拦截器来处理各种任务,如验证、日志记录、权限检查等,这使得代码更易于组织和测试。Struts2支持多种视图技术,包括JSP、FreeMarker等,可以方便地与ExtJS结合,生成动态的EXTJS界面。 **两者结合的...
学习Struts 2和AJAX框架的组合,有助于开发者构建出响应快速、交互性强的Web应用。Struts 2的强大功能和AJAX的动态特性,使得开发者可以更好地满足用户需求,提升应用的性能和用户体验。在实际开发中,深入理解和...
使用Struts验证框架的优点包括: - 提高代码复用性:验证规则可以在多个表单间共享,减少重复代码。 - 提升安全性:通过验证,防止非法数据进入系统,减少潜在的安全风险。 - 提高用户体验:及时反馈错误信息,帮助...
这个"视频上传管理后台系统Struts2"项目很可能是一个基于Struts2框架开发的系统,用于处理视频内容的上传、管理和分发。下面我们将深入探讨Struts2的核心特性以及在视频管理系统中的应用。 1. **Struts2框架概述** ...
这个项目可能包含了Action编写、视图渲染、用户交互、数据验证等基本功能,是学习和理解Struts2框架的一个很好的实践案例。通过分析和运行这个项目,可以深入理解Struts2的工作原理及其在实际应用中的运用。
Spring还提供了Spring MVC模块,可以与Struts2一起使用,或者单独作为Web层的框架。此外,Spring的事务管理功能使得在多层架构中处理数据库操作变得简单。 Hibernate是Java领域的一款对象关系映射(ORM)工具,它将...
但是这样做,不好之处就是我们可以通过人为的将开发者的验证js注掉,这样就导致验证失败,对后台安全性是一个很大的威胁,在采用struts2进行开发时,我们可以采用框架内置的校验器! 本附件为【Struts2】★☆之...
这个文件可能是解压其他文件的密码提示,可能包含一些附加的说明或资源链接,帮助读者更好地理解和使用Struts2。 总的来说,这些资料提供了一个全面的Struts2学习路径,从基础概念到高级特性,帮助开发者构建高效、...
电影后台管理系统是一个典型的JavaWeb应用,它利用了Struts2和Hibernate这两个强大的开源框架来构建。Struts2作为MVC(Model-View-Controller)架构的一部分,主要负责处理用户请求和控制应用程序流程,而Hibernate...
Struts2、jQuery和Ajax是Web开发中的三大关键技术,它们结合使用可以构建高效、动态且用户友好的登录验证系统。以下是对这些技术及其在登录验证中的应用的详细说明。 Struts2是一个基于MVC(Model-View-Controller...
Struts2、Ajax 和 jQuery 是Web开发中常用的三大技术,它们在实现动态、无刷新的交互式用户体验方面发挥...通过这种方式,我们可以实现实时的用户名验证,提高用户体验,同时也学习了Struts2、Ajax和jQuery的核心概念。
根据网上的资源实现了一个登陆时邮箱验证的功能,前台的页面比较明确,后台使用开源的第三方框架,有点乱。由于交作业比较着急,后台有些功能只有显示没有代码的具体实现,不过功能也足够交作业了。
总之,"Struts2开发用户管理后台系统源代码"是一个实践性的学习资源,通过分析和研究这个系统,开发者可以掌握Struts2的使用技巧,理解MVC模式在实际项目中的应用,以及如何构建安全、高效的用户管理系统。
在"用struts写的后台"中,我们可以理解这个项目是利用Struts2框架来实现后台业务逻辑的。下面将详细介绍Struts2框架的核心特性和关键组件。 1. **Action类**:在Struts2中,Action类是业务逻辑的主要载体。开发者...