`

Struts2的Ajax输入校验

阅读更多
这段时间在研究Struts2,学习资料是新上市的李刚著的《Struts2权威指南》,很不错的一本书,看了觉得收获很大。刚研究完Struts2中的Ajax输入校验,并做了一些例子,现总结如下:


    Ajax的输入校验不是客户端校验,而是服务器端校验,但这种服务器端校验是以异步方式进行的,浏览者无需显示提交请求,当浏览者输入完成后,系统自动完成校验。Struts2的Ajax校验建立在DWR和Dojo两个框架之上,其中DWR负责实现在JavaScript中调用远程Java方法,而Dojo则负责实现页面效果的实现。
一. 配置DWR的核心Servlet
DWR是Java领域的Ajax框架,它允许客户端JavaScript代码直接调用服务器端的Java方法,而这个过程是通过一个核心Servlet的转换来实现的。为了让DWR的核心Servlet起作用,必须在web.xml文件中配置该核心Servlet。配置DWR的核心Servlet的配置片段如下:
<!-- 配置Struts2的核心Servlet -->
<servlet>
<servlet-name>dwr</servlet-name>
<!-- 指定Servlet的实现类 -->
 <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
 <!-- 指定处于开发阶段 -->
 <init-param>
    <param-name>debug</param-name>
    <param-value>true</param-value>
 </init-param>
</servlet>
<!-- 指定DWR的核心Servlet拦截的URL -->
<servlet-mapping>
 <servlet-name>dwr</servlet-name>
 <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
在上面配置文件中增加了DWR的核心Servlet后,该Servlet负责将服务器端的Java方法暴露出来。到底那些Java方法需要被暴露出来,通过在dwr.xml配置文件中指定即可,因此需要在本应用中增加一个dwr.xml文件。
提示:此处并不许需要开发者自己开发Ajax应用,并不需要开发者利用DWR框架,我们只需利用Struts2对DWR的封装即可。因此,只需在Web应用的WEB-INF路径下增加dwr.xml文件即可,而且dwr.xml文件的代码也是固定的:
<!DOCTYPE dwr PUBLIC 
 "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" 
 "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
 <!-- 定义所有需要被暴露的Java方法 -->
     <allow>
  <!-- 定义将org.apache.struts2.validators.DWRValidator创建成一个validator对象 -->
         <create creator="new" javascript="validator">
             <param name="class" value="org.apache.struts2.validators.DWRValidator"/>
         </create>
  <!-- 定义一个转换器 -->
         <convert converter="bean" match="com.opensymphony.xwork2.ValidationAwareSupport"/>
     </allow>
     <signatures>
        <![CDATA[
        import java.util.Map;
        import org.apache.struts2.validators.DWRValidator;
        DWRValidator.doPost(String, String, Map<String, String>);
        ]]>
     </signatures>
</dwr>
在上面配置文件中,将org.apache.struts2.validators.DWRValidator类创建成一个JavaScript对象,这个对象名为validator。当然,这里所说的创建是假创建,因为Java类是无法创建JavaScript对象,但DWR提供一种方式,允许当我们在客户端调用validator的方法时,转换成调用DWRValidator实例的方法。
提示:关于DWR的运行原理和使用细节,请读者参考笔者所著的《基于J2EE的Ajax宝典》一书。此处由于篇幅管理,无法详述DWR的用法和细节。
实际上,对于一个Struts2的开发者而言,无需理会这些实现细节,因为Struts2已经为我们提供了这些封装,我们只需要在Struts2封装的基础上进行开发即可。
值得指出的是,为了让Web应用增加DWR支持,显然还需要将DWR的二进制包复制到Web应用中。即使对于Struts2.0.6正式版,依然不支持DWR的的最新版本(DWR的最新版本是2.0.1),因此只能使用DWR的前一个正式版1.1.3,将dwr-1.1.3.jar文件复制到Web应用中即可。
提示:由于Struts2发行版中并未包含DWR二进制文件。因此,dwr-1.1.3.jar文件必须到DWR的官方站点(http://getahead.ltd.uk/dwr/)自行下载。

二. 设置页面的Ajax主题
正如前面已经提到的,实现Ajax交互必须在页面中导入Ajax风格的controlheader.ftl,这个控件负责当每个输入组件失去焦点时,将输入结果发送到服务器端进行校验。
为了实现Ajax校验,还需要将表单设置成Ajax主题,并且设置validate="true"。下面是本示例应用中regist.jsp页面的代码:
<%@ page language="java" contentType="text/html; charset=GBK"%>
<!-- 导入Struts2标签库 -->
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>请输入您的注册信息</title>
<!-- 导入Ajax主题的controlheader.ftl -->
<s:head theme="ajax"/>
</head>
<body>
<H1>请输入您的注册信息</H1>
<!-- 设置表单使用Ajax主题,并且设置validate="true" -->
<s:form action="regist" theme="ajax" validate="true">
 <s:textfield name="name" label="作者名"/><br>
 <s:textfield name="pass" label="密码"/>
 <s:textfield name="age" label="年龄"/>
 <s:textfield name="birth" label="生日"/>
 <s:submit value="注册"/>
</s:form>
</body>
</html>
在上面的表单被设置成Ajax主题(这将意味着该表单是一个远程表单),并且设置了validate="true"属性。一旦完成了上面设置后,当某个输入组件失去焦点时,系统会负责将输入内容发送到服务器端进行校验。

三. 设置校验规则
对于使用Ajax校验的Action类,与基本校验的Action类并没有太大的不同之处。但必须指出:尽量不要重写Action类的validate方法,重写该方法来完成Ajax校验可能出现一些未知异常(这可能是Struts2还需要完善的地方)。
注意:不同通过重写validate方法来完成Ajax校验。
为了完成输入校验,我们通过定义自己的校验规则文件来完成输入校验,本输入校验文件使用字段校验器风格来配置校验规则。下面是校验文件的代码:
文件,该文件指定了Action的属性必须满足怎样的规则,下面是该应用中Action的校验文件的代码。
<?xml version="1.0" encoding="GBK"?>
<!-- 指定校验配置文件的DTD信息 -->
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
 "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<!-- 校验文件的根元素 -->
<validators>
 <!-- 校验Action的name属性 -->
     <field name="name">
  <!-- 指定name属性必须满足必填规则 -->
         <field-validator type="requiredstring">
   <param name="trim">true</param>
             <message>必须输入名字</message>
         </field-validator>
  <!-- 指定name属性必须匹配正则表达式 -->
         <field-validator type="regex">
            <param name="expression"><![CDATA[(\w{4,25})]]></param>
             <message>您输入的用户名只能是字母和数组,且长度必须在4到25之间</message>
</field-validator>
     </field>
 <!-- 校验Action的pass属性 -->
 <field name="pass">
  <!-- 指定pass属性必须满足必填规则 -->
  <field-validator type="requiredstring">
   <param name="trim">true</param>
   <message>必须输入密码</message>
  </field-validator>
  <!-- 指定pass属性必须满足匹配指定的正则表达式 -->
  <field-validator type="regex">
   <param name="expression"><![CDATA[(\w{4,25})]]></param>
   <message>您输入的密码只能是字母和数组,且长度必须在4到25之间</message>
  </field-validator>
 </field>
 <!-- 指定age属性必须在指定范围内-->
 <field name="age">
  <field-validator type="int">
   <param name="min">1</param>
   <param name="max">150</param>
   <message>年纪必须在1到150之间</message>
  </field-validator>
</field>
 <!-- 指定birth属性必须在指定范围内-->
 <field name="birth">
  <field-validator type="date">
   <!-- 下面指定日期字符串时,必须使用本Locale的日期格式 -->
   <param name="min">1900-01-01</param>
   <param name="max">2050-02-21</param>
   <message>年纪必须在${min}到${max}之间</message>
  </field-validator>
 </field>
</validators>
实际上,这份校验文件与之前进行基本校验的校验文件并没有太大的区别。这也证明了Struts2框架的简单、易用。
完成上面定义后,如果浏览者在输入页面中输入用户名,将焦点移到密码输入框时,将看到Ajax校验效果。
分享到:
评论

相关推荐

    struts2的Ajax实现注册验证

    这个是我自己用的代码和jar包,我在自己的机子实现了注册用户名是否已存在的功能。主要注意点都在文档里了。

    基于struts2和DWR的Ajax输入校验实例

    DWR是一个很好的Ajax框架,使用他和STRUTS框架结合在一起,实现输入的校验的效果非常好,使用也方便

    异步校验jquery-ajax

    本工程有两种ajax异步校验注册时输入的username是否与数据库中的值重复,通过mybatis实现数据库,通过servlet或者struts2实现控制层,通过ajax,jquery,json,实现异步校验

    struts2帮助文档

    struts2实现表单数据校验 struts2的基石-拦截器 struts2中实现IOC struts2中实现文件上传 struts2中实现CRUD struts2中的OGNL struts2的新表单标志的使用 struts2与AJAX一 struts2与AJAX二 struts2与AJAX三 struts2...

    struts2实现服务器端校验示例

    struts2实现服务器端校验示例,包含Dojo实现类似ajax校验

    [Struts 2权威指南--基于WebWork核心的MVC开发(高清完整版) 1/12

    第1章 Struts 2概述,第2章 Struts 2下的HelloWorld,第3章 Struts 2基础,第4章 深入Struts 2,第5章 Struts 2的类型转换,第6章 文件的上传和下载.,第7章 Struts 2的拦截器,第8章 Struts 2的输入校验,9.2 ...

    dwr与struts2

    dwr与struts2简介,Struts2的Ajax支持介绍,基于Ajax的输入校验等

    STRUTS 2完全学习手册.pdf

    包括Struts 2中配置文件的详细讲解、国际化与异常处理、数据类型的转换、数据的输入校验、Struts 2强大的标签库、Struts 2中文件的上传与下载、Struts 2对Ajax的支持、Struts 2与流行框架的整合,最后以3个实例由...

    struts2 spring2 hibernate3 ajax实现的一个注册登录实例

    演示功能包括: ...使用Struts2的JSON插件完成与Ajax的交互 实现校验用户名功能 压缩包中包括sql文件 修改reg_login\WEB-INF路径下的applicationContext.xml文件,将其中的数据库密码修改为你的数据库密码

    个人认为目前最完备的Struts2教程

    01 为Struts 2.0做好准备 02 常用的Struts 2.0的标志(Tag) 03 Struts 2.0的Action讲解 04 在Struts 2.0中国际化(i18n)您的应用程序 05 转换器(Converter)——Struts 2.0中的魔术师 ...13 Struts 2与AJAX

    struts2入门教程

    很好的struts2入门教程,网上搜集整理的! 内容: ·常用的Struts 2.0的标签(Tag)介绍 ·Struts 2.0的Action讲解 ·Struts2国际化(i18n)您的应用... ·Struts 2与AJAX ·Struts2分页 ·完全Struts's Tiles入门

    struts2.0中文教程

    01 为Struts 2.0做好准备 02 常用的Struts 2.0的标志(Tag) 03 Struts 2.0的Action讲解 04 在Struts 2.0中国际化(i18n)您的应用程序 05 转换器(Converter)——Struts 2.0中的魔术师 ...13 Struts 2与AJAX

    Struts 2.0系列(MAX)

    Struts 2.0系列(MAX),pdf格式,全方位介绍struts2: 常用的Struts 2.0的标志(Tag)介绍 Struts 2.0的Action讲解 在Struts 2.0中国际化(i18n)您的应用程序 转换器(Converter)——Struts 2.0中的...Struts 2与AJAX

    Struts2完全自学手册(16-19)

    本书全面讲述Struts 2开发框架的知识,包括Struts 2中配置文件的详细讲解、国际化与异常处理、数据类型的转换、数据的输入校验、Struts 2强大的标签库、Struts 2中文件的上传与下载、Struts 2对Ajax的支持、Struts 2...

    Struts2入门教程(全新完整版)

    十二、总结 本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及提供的app实例。 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图...

    Java Web整合开发实战:基于Struts 2+Hibernate+Spring(PDF)

    6章 Struts之数据校验与GJ化 7章 详解Struts之标签库 8章 Struts之拦截器使用技巧 9章 在Struts中应用Ajax技术 10章 Struts之项目实战 3篇 持久层框架Hibernate技术 11章 Hibernate快速上手 12章 精解...

    struts项目学习笔记

    更强大、更易用输入校验功能 整合Ajax支持:json插件 Struts2的今生前世: 1.早期开发模型Servlet+JSP+JavaBean显得力不从心: 流程凌乱、数据传递无序、缺乏辅助功能。 2.MVC模式的轻量级Web应

    Struts2.0中文教程权威版

    Struts 2权威指南——第1章 Struts 2概述.doc Struts 2权威指南——第...13 Struts 2与AJAX Struts2中用Spring实现IoC.doc Struts2中的零配置与CoC(Convention over Configration).doc Struts2介绍之使用链接标签.doc

    struts2学习ppt

    掌握Struts2原理、基本配置及...掌握Struts2核心解析、国际化、类型转换、输入校验、OGNL、Struts2标签库 了解AJAX技术支持 掌握文件的上传与下载。 深入理解MVC与Struts之间的关系,并使用基本MVC和Struts进行项目开发

    Struts 2完全自学手册(11-21)

    本书全面讲述Struts 2开发框架的知识,包括Struts 2中配置文件的详细讲解、国际化与异常处理、数据类型的转换、数据的输入校验、Struts 2强大的标签库、Struts 2中文件的上传与下载、Struts 2对Ajax的支持、Struts 2...

Global site tag (gtag.js) - Google Analytics