`

[转]Struts 客户端验证器

    博客分类:
  • Java
阅读更多
◆ 问题

你想要用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 函数的时候,必须研究现有的代码基,首先确信没有适合你需要的,因为现行可用的改进版本最终要发布到社区。

分享到:
评论

相关推荐

    Struts2 校验器

    Struts2提供了.struts2-jquery-validation-plugin等插件支持客户端验证。 2. **服务器端验证**:当客户端验证通过后,数据被发送到服务器,服务器端的验证是不可或缺的一环,因为它能防止恶意用户绕过客户端验证。...

    struts2验证框架

    在 Struts2 中,验证分为两部分:客户端验证和服务器端验证。客户端验证是指在浏览器端对用户输入的数据进行验证,服务器端验证是指在服务器端对用户输入的数据进行验证。在本文中,我们将主要介绍 Struts2 的服务器...

    struts的表单验证

    在Struts框架中,表单验证通常通过两个主要方式实现:客户端验证和服务器端验证。 1. 客户端验证: 客户端验证发生在用户的浏览器上,通常使用JavaScript或jQuery等库来执行。这种方式可以即时反馈错误,提高用户...

    struts2验证框架简单示例

    除了内置的验证器,Struts2还允许创建自定义验证器。这可以扩展框架的功能,满足特定的业务需求。 ### 六、总结 Struts2验证框架简化了服务器端的输入验证,提供了一种声明式的方式定义验证规则。通过XML配置或...

    详解Java的Struts框架中上传文件和客户端验证的实现

    在Java的Struts框架中,文件上传和客户端验证是两个重要的功能,对于构建Web应用程序至关重要。Struts作为Java SSH(Spring、Struts、Hibernate)三大框架之一,提供了一种结构化的方式来开发MVC(Model-View-...

    Struts Validator验证器使用指南

    ### Struts Validator 验证器使用指南:深入解析与实践 #### 一、Struts Validator 简介 Struts Validator框架是Struts框架的重要组成部分,用于实现客户端和服务器端的数据验证。自0.5版以来,Struts Validator就...

    Struts1.x的验证框架示例

    Struts1.x内置了多种验证器类型,如`requiredstring`(检查是否为空)、`int`(检查是否为整数)、`long`、`email`(检查是否符合电子邮件格式)等。你可以根据需要选择合适的验证器类型。 5. **验证流程** 当...

    Struts Validator验证框架详细讲解.txt

    此外,Struts Validator还支持客户端验证。通过在JSP页面中使用特定的标签,可以生成JavaScript代码,实现在数据提交前的即时验证,提高用户体验。 #### 结语 Struts Validator作为Struts框架的强大组件,不仅简化...

    Struts2 验证框架

    在Struts2验证框架中,主要有两种验证方式:客户端验证和服务器端验证。客户端验证通常使用JavaScript在用户提交表单前进行,可以提供实时反馈,提升用户体验。而服务器端验证是必不可少的安全层,确保即使客户端...

    Struts Validator验证器使用指南.doc

    这个验证器自Struts 1.1版本开始成为其核心组成部分,极大地增强了应用的健壮性和用户体验。以下是对Struts Validator使用的一些关键知识点的详细说明: 1. **验证器的扩展性**:在开发过程中,开发人员可以选择...

    struts2验证笔录

    在Struts2中,验证主要分为两大类:客户端验证和服务器端验证。客户端验证主要用于提高用户体验,而服务器端验证则是保证数据正确性的关键步骤。Struts2提供了强大的内置验证工具,可以方便地进行数据类型转换和格式...

    Struts的验证框架Validate使用续一

    在Struts的验证框架中,验证主要分为两个阶段:客户端验证和服务器端验证。客户端验证通常使用JavaScript进行,可以在用户提交表单前立即反馈错误,提高交互性。服务器端验证则是必不可少的安全层,即使客户端验证...

    struts2 登陆注册 以及验证

    对于验证,Struts2提供两种验证方式:客户端验证和服务器端验证。客户端验证通常使用JavaScript进行,对用户输入的数据进行实时检查,如非空验证、格式验证等。服务器端验证则在服务端进行,确保数据的安全性,防止...

    [浪曦原创]Struts系列 第5讲 Struts的验证框架Validate使用续一(zk001)

    Struts的验证框架也支持自定义验证器,通过实现`Validator`接口或者扩展`FieldAwareValidator`类,开发者可以创建自己的验证逻辑,满足特定的业务需求。 在实际应用中,我们还需要考虑如何优雅地处理验证错误。通常...

    struts2验证+拦截器+国际化+下载excle文档+ssh集成.rar

    Struts2提供了两种验证方式:客户端验证和服务器端验证。客户端验证通过JavaScript在用户提交表单前检查数据,而服务器端验证确保即使绕过客户端验证也能保证数据的正确性。开发者可以自定义验证规则,使用Action类...

    struts2 拦截器

    3. **权限验证**:拦截器可以实现用户登录检查,防止未授权的访问。 4. **数据校验**:在Action执行前,拦截器可以对输入数据进行校验,确保数据的合法性。 5. **业务逻辑增强**:如事务管理,可以在拦截器中进行...

    struts2输入验证例子

    默认情况下,Struts2提供了两种验证方式:服务器端验证和客户端验证。服务器端验证发生在后台,通常在Action类中,而客户端验证则在用户浏览器中通过JavaScript进行,提供了更好的用户体验,因为它可以即时反馈错误...

    web struts输入验证

    这些标签能够自动绑定到Action中的属性,并支持基本的客户端验证。 2. **后端逻辑验证**: - 在Action类中重写`validate()`方法来实现验证逻辑。 - 使用`addFieldError()`方法来记录验证失败的信息,这些信息会...

Global site tag (gtag.js) - Google Analytics