- 浏览: 752164 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
u011487470:
感觉就是知识采集一样,博主能不能整理一下
基于Web的IM简介 -
whxtbest:
whxtbest 写道2里面:如果T本身就是重复的话 比如 ...
关于后缀树的一些理解 -
whxtbest:
2里面:如果T本身就是重复的话 比如S是aaab,T是aa ...
关于后缀树的一些理解 -
刘亮love小雪:
谢谢啦
Java 2D高级绘图 -
bluky999:
收集的资料挺多的 哈哈
基于Web的IM简介
◆ 问题
你想要用Struts 验证器框架实现客户端(JavaScript )有效性验证。
◆ 背景
前一个方法说明了基本的Struts 验证器框架对于服务器端的数据检查。本方法在此基础上论述在validator -rules .xml 文件中嵌入JavaScript ,创建面向对象的,可重用的,可维护的客户端解决方案。
◆ 方法
我们将从引入用于把我们的页面链接到我们即将创建的验证规则的JSP 标签开始:
<html:javascript formName="yourEmailForm"/>
这个标签可以插入JSP 页面的任何地方,尽管最好的位置是接近你要验证的表单,为了以后的引用。为了连续性和简单起见,我们将引用前面所讲方法中服务器端有效性验证
类似方式在客户端验证电子邮件地址。属性formName,应该包含ActionForm 名字的值。JSP 表单说明必须被修改为:
<html:form action="yourEmailAction" onSubmit="return validateYourEmail-Form(this);">
这个标签创建了一个onSubmit JavaScript Action,调用validateYourEmailForm ()函数。如果有效性验证失败,一个被适当的消息填充的JavaScript alert ()消息框弹出到视图。函数validateYourEmailForm ()由Struts 即时地创建(即,验证 +FormBeanName)。
我们来重新看看validator -rules .xml 文件和嵌入的JavaScript 代码(),如清单5.7所示:
清单5.7 validation -rules .xml
<validator name="email" classname="org.apache.struts.validator.FieldChecks"
method="validateEmail"
ethodParams="j ava.lang.Obj ect,
org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionErrors, javax.servlet.http.HttpServletRequest"
depends="" msg="errors.email">
<javascript>< ! [CDATA[
function validateEmail(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array ();
oEmail = new email();
for (x in oEmail) {
if ( (form[oEmail [x] [0] ] .type == 'text' ||
form[oEmail[x][0]].type == 'textarea') && (form[oEmail[x][0]].value.length > 0)) { if if(!checkEmail(form[oEmail[x][0]].value)) {
if (i == 0) {
focusField = form[oEmail[x][0]];
}
fields[i + + ] = oEmail[x] [1] ;
bValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return bValid;
}
/**
* Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),
* http://javascript.internet.com
*/
function checkEmail(emailStr) {
if (emailStr.length == 0) {
return true;
}
var emailPat=/^(.+)@(.+)$/;
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]
var validChars="\[*\\s" + specialChars + "\]";
var quotedUser="(\"[^\"]*\")";
var ipDomainPat=/
^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
var atom=validChars + ' + ';
var word="(" + atom + "|" + quotedUser + ")";
var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
var matchArray=emailStr.match(emailPat);
if (matchArray == null) {
return false;
}
var user=matchArray[1];
var domain=matchArray[2];
if (user.match(userPat) == null) {
return false;
}
var IPArray = domain.match(ipDomainPat);
if (IPArray != null) {
for (var i = 1; i <= 4; i++) {
if (IPArray[i] > 255) {
return false;
}
}
return true;
}
var domainArray=domain.match(domainPat);
if (domainArray == null) {
return false;
}
var atomPat=new RegExp(atom,"g");
var domArr=domain.match(atomPat);
var len=domArr.length;
if ((domArr[domArr.length-1].length < 2) ||
(domArr[domArr.length-1].length > 3)) {
return false;
}
if (len < 2) {
return false;
}
return true;
}]]></javascript>
</validator>
哇!因为这个特定的检查随同Struts 有效性验证程序包一同推出,我们不需要写一行代码。JavaScript 有效性验证脚本()位于服务器端有效性验证条目()下面,并作为一个[CDATA [条目输入到XML 文件。在<html:javascript />标签从页面被调用的时候,且onSubmit 的属性设置在<form />中时,它覆盖了服务器端并立即实现了javascript 的验证。
你还可以为同一个字段实现服务器端的有效性验证,进一步保证你的信息是正确的,或者,应用所需的不同检查,使你的数据层正确操作。
最优方法
不要把JavaScript 作为你唯一的有效性验证手段!—有时用户不能通过浏览器访问你的网页应用,或者更精明的(也通常是恶意的)用户可能仅仅在请求字符串键入他们想要张帖的信息,就绕过你的客户端检查并把信息发布到你的持久层,对它造成严重的损害。你可以禁止GET请求,但是即使这样也不是完美的办法,因为如果用户知道如何去做,他可以模拟一个浏览器。永远不要假定你的用户把你的最大利益放在心里,总要计划作有效性验证帮助你得到安全。只有服务器端的有效性验证可以确保发布到你的持久层的数据是正确和安全的。
◆ 讨论
你现在开始看到如何有可能创建复杂的JavaScript 有效性验证并容易地在整个应用中重用他们。使用<html :javascript >标签,很容易将JavaScript 集成到表单中。 一旦做好之后,你只须用一个validate+ FormBeanNameHere 值修改<html :form >标签,以包括onSubmit属性。
明显地,使用上述框架,你可以“运行你自己的”有效性验证,并且创建或者修改JavaScript 函数以满足你的需要。如果你确实创建了定制的JavaScript 有效性验证,小心你将“拥有”这段代码,不会有开源社区帮助你维护它并确保前向兼容性。 在建造定制的JavaScript 函数的时候,必须研究现有的代码基,首先确信没有适合你需要的,因为现行可用的改进版本最终要发布到社区。
你想要用Struts 验证器框架实现客户端(JavaScript )有效性验证。
◆ 背景
前一个方法说明了基本的Struts 验证器框架对于服务器端的数据检查。本方法在此基础上论述在validator -rules .xml 文件中嵌入JavaScript ,创建面向对象的,可重用的,可维护的客户端解决方案。
◆ 方法
我们将从引入用于把我们的页面链接到我们即将创建的验证规则的JSP 标签开始:
<html:javascript formName="yourEmailForm"/>
这个标签可以插入JSP 页面的任何地方,尽管最好的位置是接近你要验证的表单,为了以后的引用。为了连续性和简单起见,我们将引用前面所讲方法中服务器端有效性验证
类似方式在客户端验证电子邮件地址。属性formName,应该包含ActionForm 名字的值。JSP 表单说明必须被修改为:
<html:form action="yourEmailAction" onSubmit="return validateYourEmail-Form(this);">
这个标签创建了一个onSubmit JavaScript Action,调用validateYourEmailForm ()函数。如果有效性验证失败,一个被适当的消息填充的JavaScript alert ()消息框弹出到视图。函数validateYourEmailForm ()由Struts 即时地创建(即,验证 +FormBeanName)。
我们来重新看看validator -rules .xml 文件和嵌入的JavaScript 代码(),如清单5.7所示:
清单5.7 validation -rules .xml
<validator name="email" classname="org.apache.struts.validator.FieldChecks"
method="validateEmail"
ethodParams="j ava.lang.Obj ect,
org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionErrors, javax.servlet.http.HttpServletRequest"
depends="" msg="errors.email">
<javascript>< ! [CDATA[
function validateEmail(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array ();
oEmail = new email();
for (x in oEmail) {
if ( (form[oEmail [x] [0] ] .type == 'text' ||
form[oEmail[x][0]].type == 'textarea') && (form[oEmail[x][0]].value.length > 0)) { if if(!checkEmail(form[oEmail[x][0]].value)) {
if (i == 0) {
focusField = form[oEmail[x][0]];
}
fields[i + + ] = oEmail[x] [1] ;
bValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return bValid;
}
/**
* Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),
* http://javascript.internet.com
*/
function checkEmail(emailStr) {
if (emailStr.length == 0) {
return true;
}
var emailPat=/^(.+)@(.+)$/;
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]
var validChars="\[*\\s" + specialChars + "\]";
var quotedUser="(\"[^\"]*\")";
var ipDomainPat=/
^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
var atom=validChars + ' + ';
var word="(" + atom + "|" + quotedUser + ")";
var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
var matchArray=emailStr.match(emailPat);
if (matchArray == null) {
return false;
}
var user=matchArray[1];
var domain=matchArray[2];
if (user.match(userPat) == null) {
return false;
}
var IPArray = domain.match(ipDomainPat);
if (IPArray != null) {
for (var i = 1; i <= 4; i++) {
if (IPArray[i] > 255) {
return false;
}
}
return true;
}
var domainArray=domain.match(domainPat);
if (domainArray == null) {
return false;
}
var atomPat=new RegExp(atom,"g");
var domArr=domain.match(atomPat);
var len=domArr.length;
if ((domArr[domArr.length-1].length < 2) ||
(domArr[domArr.length-1].length > 3)) {
return false;
}
if (len < 2) {
return false;
}
return true;
}]]></javascript>
</validator>
哇!因为这个特定的检查随同Struts 有效性验证程序包一同推出,我们不需要写一行代码。JavaScript 有效性验证脚本()位于服务器端有效性验证条目()下面,并作为一个[CDATA [条目输入到XML 文件。在<html:javascript />标签从页面被调用的时候,且onSubmit 的属性设置在<form />中时,它覆盖了服务器端并立即实现了javascript 的验证。
你还可以为同一个字段实现服务器端的有效性验证,进一步保证你的信息是正确的,或者,应用所需的不同检查,使你的数据层正确操作。
最优方法
不要把JavaScript 作为你唯一的有效性验证手段!—有时用户不能通过浏览器访问你的网页应用,或者更精明的(也通常是恶意的)用户可能仅仅在请求字符串键入他们想要张帖的信息,就绕过你的客户端检查并把信息发布到你的持久层,对它造成严重的损害。你可以禁止GET请求,但是即使这样也不是完美的办法,因为如果用户知道如何去做,他可以模拟一个浏览器。永远不要假定你的用户把你的最大利益放在心里,总要计划作有效性验证帮助你得到安全。只有服务器端的有效性验证可以确保发布到你的持久层的数据是正确和安全的。
◆ 讨论
你现在开始看到如何有可能创建复杂的JavaScript 有效性验证并容易地在整个应用中重用他们。使用<html :javascript >标签,很容易将JavaScript 集成到表单中。 一旦做好之后,你只须用一个validate+ FormBeanNameHere 值修改<html :form >标签,以包括onSubmit属性。
明显地,使用上述框架,你可以“运行你自己的”有效性验证,并且创建或者修改JavaScript 函数以满足你的需要。如果你确实创建了定制的JavaScript 有效性验证,小心你将“拥有”这段代码,不会有开源社区帮助你维护它并确保前向兼容性。 在建造定制的JavaScript 函数的时候,必须研究现有的代码基,首先确信没有适合你需要的,因为现行可用的改进版本最终要发布到社区。
发表评论
-
Saving JFreeChart as SVG vector images using Batik
2008-07-28 15:52 1751JFreeChart is a free Java class ... -
JfreeChart的使用
2008-07-28 13:42 1327先从网上找点介绍。 一、简介 WW 的发展使得基于 ... -
JPanel绘制的东西如何保存成图像
2008-07-28 10:40 3281[/color][color=darkred][color=d ... -
使用Java Servlet动态生成图片
2008-07-24 16:03 1968在Web应用中,经常需要动态生成图片,比如实时股市行情,各种统 ... -
Java解析JSON
2008-06-10 21:00 27782jsp文件 var people = { "pr ... -
Grizzly和comet介绍(译)
2008-06-10 20:59 2875感觉不是什么新技术,也不是什么新创意,可是一旦用起来可能对技术 ... -
DWR2.1 API Doc
2008-05-19 15:50 1236http://getahead.org/dwr-javadoc ... -
servlet/jsp 获取绝对路径和相对路径
2008-05-14 11:03 3136根目录所对应的绝对路径:request.getServletP ... -
load-on-startup作用
2008-05-14 10:53 2341load-on-startup 元素在web应 ... -
使用异步Servlet扩展AJAX应用程序
2008-05-12 23:30 1312作为Web应用程序模型的A ... -
关于Java的java.library.path
2008-04-30 00:37 16875java可以通过System.getProperty获得系统变 ... -
【转】JNI
2008-04-29 23:50 1363JNI是Java Native Interface的缩写。从J ... -
jni.h所在位置
2008-04-29 23:19 5180在%java_home%\include\下 -
servlet重定向
2008-04-23 14:20 9899在servlet/JSP编程中,服务器端重定向可以通过下面两个 ... -
CVS与Eclipse使用摘要
2008-04-16 17:08 22041. 在administrator下安装CVSNT版本,重启计 ... -
ServletContext和ServletConfig深度分析
2008-04-09 14:00 1345对于web容器来说,ServletContext接口定义了一个 ... -
JSP文件在浏览器中显示出现乱码的解决方法
2008-04-02 10:29 1760采用utf-8编码,在jsp文件中,加入下面2句即可: < ... -
GlassFish
2008-03-20 18:32 1529GlassFish社团正在开发一个免费,开源的Java EE5 ... -
jndi与jdbc的区别
2008-03-20 15:59 2774jndi给所有的命名目录服务提供统一的API前端,jdbc给所 ... -
Tomcat5.5下配置JNDI JDBC数据源
2008-03-20 15:57 14771 安装JDBC驱动 通常,将JDBC驱动安 ...
相关推荐
Struts2提供了.struts2-jquery-validation-plugin等插件支持客户端验证。 2. **服务器端验证**:当客户端验证通过后,数据被发送到服务器,服务器端的验证是不可或缺的一环,因为它能防止恶意用户绕过客户端验证。...
在 Struts2 中,验证分为两部分:客户端验证和服务器端验证。客户端验证是指在浏览器端对用户输入的数据进行验证,服务器端验证是指在服务器端对用户输入的数据进行验证。在本文中,我们将主要介绍 Struts2 的服务器...
在Struts框架中,表单验证通常通过两个主要方式实现:客户端验证和服务器端验证。 1. 客户端验证: 客户端验证发生在用户的浏览器上,通常使用JavaScript或jQuery等库来执行。这种方式可以即时反馈错误,提高用户...
除了内置的验证器,Struts2还允许创建自定义验证器。这可以扩展框架的功能,满足特定的业务需求。 ### 六、总结 Struts2验证框架简化了服务器端的输入验证,提供了一种声明式的方式定义验证规则。通过XML配置或...
在Java的Struts框架中,文件上传和客户端验证是两个重要的功能,对于构建Web应用程序至关重要。Struts作为Java SSH(Spring、Struts、Hibernate)三大框架之一,提供了一种结构化的方式来开发MVC(Model-View-...
### Struts Validator 验证器使用指南:深入解析与实践 #### 一、Struts Validator 简介 Struts Validator框架是Struts框架的重要组成部分,用于实现客户端和服务器端的数据验证。自0.5版以来,Struts Validator就...
Struts1.x内置了多种验证器类型,如`requiredstring`(检查是否为空)、`int`(检查是否为整数)、`long`、`email`(检查是否符合电子邮件格式)等。你可以根据需要选择合适的验证器类型。 5. **验证流程** 当...
此外,Struts Validator还支持客户端验证。通过在JSP页面中使用特定的标签,可以生成JavaScript代码,实现在数据提交前的即时验证,提高用户体验。 #### 结语 Struts Validator作为Struts框架的强大组件,不仅简化...
在Struts2验证框架中,主要有两种验证方式:客户端验证和服务器端验证。客户端验证通常使用JavaScript在用户提交表单前进行,可以提供实时反馈,提升用户体验。而服务器端验证是必不可少的安全层,确保即使客户端...
这个验证器自Struts 1.1版本开始成为其核心组成部分,极大地增强了应用的健壮性和用户体验。以下是对Struts Validator使用的一些关键知识点的详细说明: 1. **验证器的扩展性**:在开发过程中,开发人员可以选择...
在Struts2中,验证主要分为两大类:客户端验证和服务器端验证。客户端验证主要用于提高用户体验,而服务器端验证则是保证数据正确性的关键步骤。Struts2提供了强大的内置验证工具,可以方便地进行数据类型转换和格式...
在Struts的验证框架中,验证主要分为两个阶段:客户端验证和服务器端验证。客户端验证通常使用JavaScript进行,可以在用户提交表单前立即反馈错误,提高交互性。服务器端验证则是必不可少的安全层,即使客户端验证...
对于验证,Struts2提供两种验证方式:客户端验证和服务器端验证。客户端验证通常使用JavaScript进行,对用户输入的数据进行实时检查,如非空验证、格式验证等。服务器端验证则在服务端进行,确保数据的安全性,防止...
Struts的验证框架也支持自定义验证器,通过实现`Validator`接口或者扩展`FieldAwareValidator`类,开发者可以创建自己的验证逻辑,满足特定的业务需求。 在实际应用中,我们还需要考虑如何优雅地处理验证错误。通常...
Struts2提供了两种验证方式:客户端验证和服务器端验证。客户端验证通过JavaScript在用户提交表单前检查数据,而服务器端验证确保即使绕过客户端验证也能保证数据的正确性。开发者可以自定义验证规则,使用Action类...
3. **权限验证**:拦截器可以实现用户登录检查,防止未授权的访问。 4. **数据校验**:在Action执行前,拦截器可以对输入数据进行校验,确保数据的合法性。 5. **业务逻辑增强**:如事务管理,可以在拦截器中进行...
默认情况下,Struts2提供了两种验证方式:服务器端验证和客户端验证。服务器端验证发生在后台,通常在Action类中,而客户端验证则在用户浏览器中通过JavaScript进行,提供了更好的用户体验,因为它可以即时反馈错误...
这些标签能够自动绑定到Action中的属性,并支持基本的客户端验证。 2. **后端逻辑验证**: - 在Action类中重写`validate()`方法来实现验证逻辑。 - 使用`addFieldError()`方法来记录验证失败的信息,这些信息会...