这段时间在研究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校验效果。
分享到:
相关推荐
这篇文档“struts与ajax.docx”可能包含了如何将Struts2和Ajax结合使用的详细步骤。通常,这个过程会涉及以下几个关键点: 1. **Struts2配置**:首先,需要在`struts.xml`配置文件中定义一个Action,这个Action将...
在Struts2中,校验器(Validator)是处理用户输入验证的核心组件,确保提交到服务器的数据符合预设的业务规则。这篇博客文章可能是关于如何使用Struts2的内置校验机制以及自定义校验规则的探讨。 Struts2的校验框架...
总结一下,Struts2和DWR的集成为Ajax输入校验提供了一种高效的方法。Struts2负责处理业务逻辑和数据校验,而DWR则作为桥梁,实现了客户端与服务器端的实时通信。这种组合使用不仅可以确保数据的准确性,还能提升Web...
然而,Struts2结合Ajax实现了基于服务器端的异步校验,即在用户输入的过程中或完成后,通过Ajax异步请求将数据发送至服务器进行校验,无需等待页面刷新即可得到反馈。这大大提升了用户体验,同时也减轻了服务器的...
在Struts2中,输入校验是确保数据安全和应用程序功能正确性的重要环节。本文将深入探讨Struts2中的输入校验机制,包括其重要性、实现方式以及如何在实际项目中应用。 输入校验对于任何Web应用程序都是必不可少的,...
本工程有两种ajax异步校验注册时输入的username是否与数据库中的值重复,通过mybatis实现数据库,通过servlet或者struts2实现控制层,通过ajax,jquery,json,实现异步校验
struts2实现表单数据校验 struts2的基石-拦截器 struts2中实现IOC struts2中实现文件上传 struts2中实现CRUD struts2中的OGNL struts2的新表单标志的使用 struts2与AJAX一 struts2与AJAX二 struts2与AJAX三 struts2...
Struts2、jQuery和Ajax是Web开发中的三大关键技术,它们结合使用可以构建高效、动态且用户友好的登录验证系统。以下是对这些技术及其在登录验证中的应用的详细说明。 Struts2是一个基于MVC(Model-View-Controller...
Struts2 数据校验是Java Web开发中一个关键的组件,它主要用于确保应用程序接收到的数据是合法、有效的,从而防止因用户输入错误或恶意数据导致的问题。Struts2框架提供了强大的数据验证机制,使得开发者可以方便地...
8. **AJAX校验**: - Struts2可以与jQuery等JavaScript库集成,实现实时的客户端验证,提高用户体验。 9. **整合其他验证框架**: - Struts2还可以与Hibernate Validator或JSR-303 Bean Validation等其他验证框架...
Struts2、Spring和Ajax是Java Web开发中的三个重要框架,它们协同工作可以构建出高效、灵活的Web应用程序。在用户登录场景中,这三者的结合尤为重要,它们各自承担着不同的职责,共同确保用户能够方便、安全地进行...
2. Struts配置文件的理解:学习struts-config.xml或struts2的struts.xml,如何配置Action、Interceptor等。 3. Struts中拦截器的使用:了解不同拦截器的作用,如何自定义拦截器。 4. Ajax基础:熟悉XMLHttpRequest...
在Struts2中,校验器(Validator)扮演着至关重要的角色,它负责验证用户输入的数据,确保其符合预设的规则和格式,从而提升数据的准确性和应用的安全性。 Struts2的校验框架基于Apache Commons BeanUtils和...
Struts2和Ajax是两种在Web开发中广泛使用的技术,它们结合使用可以为用户带来更加流畅和实时的交互体验。在此项目中,"Struts2+ajax注册验证源码"是一个利用这两种技术实现的简单注册验证系统。接下来,我们将详细...
第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 ...
- **输入校验**:Struts2支持基于Ajax的输入校验,这意味着在用户输入的同时就可以完成校验过程,而无需用户进行额外的提交操作。一旦输入不符合预期的要求,系统会立即显示校验错误信息。 - **异步表单提交**:...
在这个"struts2实现服务器端校验示例"中,我们将探讨如何在Struts2中实现高效的服务器端数据校验,并结合Dojo实现类似AJAX的实时验证。 首先,Struts2的校验框架是基于Action类的,每个Action类都可以关联一个或多...
Struts2可以通过拦截器实现权限校验,防止未授权的访问。 产品管理是系统的核心模块,可能包括添加、删除、修改产品信息,以及查询产品的功能。这些操作可以通过Struts2的Action和Service层来实现,数据库中可能...
Struts 2通过向当前action中添加错误信息来表示校验失败。在validate方法执行完毕之后,执行execute方法之前,会检查action中是否添加了错误信息。如果添加了错误信息,则表示校验失败;否则,校验成功。添加错误...
此外,Struts的国际化和验证功能使得系统能够适应多语言环境,并对用户输入的数据进行有效校验。 Ajax技术在教质系统中的使用,主要提升了用户体验。通过在后台异步处理数据,用户可以在不刷新页面的情况下进行数据...