基于AJAX技术实现Struts校验框架

ajax

  提要 实时的数据校验是AJAX技术的重要优点之一,Struts校验框架通过加入这种技术进一步丰富了其MVC,从而使得Web应用程序的开发效果更接近于桌面应用程序。

  一、 引言

  校验框架的根本目的是实现域校验。在Web应用程序中有许多方法可以实现域校验,总体上可以分为两类:服务器端和客户端。其中,Struts校验框架是适合于基于Java的Web应用程序环境最好的框架之一。它可以使用服务器端校验来配置应用程序并且使用在校验过程(在请求处理期间激活)中生成的错误消息;而且它也可以通过在请求页面上生成的JavaScript来实现客户端校验。

  AJAX是一种能异步地调用服务器并返回XML文档的技术,近来十分流行。它的重要优点之一是能够实现数据的实时校验。

  本文将主要探讨如何使用AJAX技术进一步增强现有Struts校验框架的功能。为此,我们必须开发几个组件来实现选择校验框架并且为客户端生成指定格式的消息,还要开发一个处理错误消息生成的标签库。

  二、 前提

  你需要使用Windows操作系统,并安装Eclipse集成开发环境和Tomcat应用程序服务器,还要确保在你的操作系统上已经注册了MSXML 3.0 ActiveX对象。另外,你还需要Struts库(http://struts.apache.org)和JDOM库(www.jdom.org,用于XML开发),请分别参考下面的图1和图2。


图1.AjaxForm类层次图


图2.ErrormessageHandler类层次图

  三、 服务器端

  StrustsActionServlet

  首先,我们必须用这个类扩展org.apache.struts.action.ActionServlet类以创建一个servletMapping变量,并用此变量来存储有关浏览器地址的action路径的信息。当添加代码时,我们必须把web.xml配置为一个用于应用程序服务器的Web应用程序描述器。

  web.xml的配置如下:

...
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>net.sf.struts.servlet.StrutsActionServlet</servlet-class>
...
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
...

  相应的StrutsActionServlet代码看上去具有如下形式:

public class StrutsActionServlet extends the ActionServlet.
{
public String getServletMapping() {
return this.servletMapping;
}
}

  AjaxValidationRequestProcessor

  为了支持现有的Struts框架,我们必须扩展Struts包中的RequestProcessor类。为此,我们必须定制请求处理器,其一是因为我们必须区分怎样实现校验-使用现有的Struts框架还是使用基于AJAX的方案;其二是因为我们将在服务器和客户端之间在有关如何拦截消息方面签订一种协约。在消息生成过程中,我们使用的是XML格式-这是一种很好的媒体消息发送格式。我们所使用的XML格式的定义如下:

  XML Format

<?xml version="1.0" encoding="UTF-8"?>
<message>
<identity name=messageAreaId>
<description>
MessageValue
</description>
</identity>
</message>

  描述

  · Identity是客户端JavaScript的ID,用于指明消息应该放置的位置。

  · Description是服务器端生成错误消息以后的结果。

  首先,在处理映射前,我们需要从Web描述符中得到servlet映射配置信息。激活该过程后,应用程序就着手准备继承自AjaxForm类的表单实例。接下来的处理将管理AJAX校验并且应该进行检查以确保来自客户端的请求没有使用Struts校验框架。在请求期间另外要实现,其一是处理收集的由客户端发送到action表单的信息的填充问题;其二是通过使用已经存在于父类AjaxValidationRequestProcessor(TilesRequestProcessor)中的现有Struts校验框架中的方法来处理校验问题。

  TilesRequestProcessor中的校验过程将调用所有基于Struts校验框架的校验并且把action错误保存到请求中。我们需要把action错误分析成片断并生成将被发送到客户端的XML消息校验。既然我们想改变校验方式,那么在校验过程中,我们应该检查我们使用的是哪一种校验框架(见图3)。


图3.控制器处理流程

  在此,我们把JDOM作为处理引擎并使用它生成XML消息。如图4所示,当开始校验并且所用校验框架是AJAX校验框架时,接下来要进行填充错误消息并且构建XML消息校验。


图4.过滤和XML校验生成过程

  ErrorMessageHandler

  这个类具有XML消息构建器的功能,它基于identity和description属性来构建XML消息。在调用buildXMLMessage后,调用者就会准备文档并设置XML消息的根元素。这个类还有一个addNextXMLMessage函数,这个函数负责把其它校验消息添加进XML(见源代码中的列表1)。
AjaxValidationRequestProcessor类中的process方法负责把响应的content type设置为"text/xml"并且以字符串形式发送XML消息。该方法的代码如列表2(见所附源码)所示。

  AjaxValidationRequestProcessor类中的processValidation方法负责填充action错误并且基于XML格式约定为客户端构建消息。此函数的代码如下所示:

...
ActionErrors errors = (ActionErrors) request.getAttribute(Globals.ERROR_KEY);
Locale locale = (Locale) request.getAttribute(Globals.LOCALE_KEY);
generateXMLMessage(errors, identity, locale, sbXMLMessage);
...

[1] [2]  下一页

时间: 2016-03-05

基于AJAX技术实现Struts校验框架的相关文章

连载-基于插件技术的GIS应用框架(C# + ArcEngine9.3)(五)

问题描述 [align=center]基于插件技术的GIS应用框架(C#+ArcEngine9.3)(五)--------------------------插件初始化(1)[/align]在第四节中,我们论及了插件的XML保存格式,对于各个XML节点的属性也有了一个大概的了解,下面,我们就如何利用DevExpress套件就这些插件的加载进行详细的剖析.首先,我们必须从已经编译好的DLL中获取插件的类型信息,这就需要利用C#所提供的反射机制.一.插件的反射///根据反射机制产生插件对象并将其放入

基于Ajax技术实现文件上传带进度条_AJAX相关

1.概述 在实际的Web应该开发或网站开发过程中,经常需要实现文件上传的功能.在文件上传过程中,经常需要用户进行长时间的等待,为了让用户及时了解上传进度,可以在上传文件的同时,显示文件的上传进度条.运行本实例,如图1所示,访问文件上传页面,单击"浏览"按钮选择要上传的文件,注意文件不能超过50MB,否则系统将给出错误提示.选择完要上传的文件后,单击"提交"按钮,将会上传文件并显示上传进度. 2.技术要点 主要是应用开源的Common-FileUpload组件来实现分

基于Ajax技术实现考试倒计时并自动提交试卷_AJAX相关

1.概述 在开发网络考试系统时,考试计时并自动提交试卷是必不可少的功能.由于在答卷过程中,试卷不能刷新,所以需要使用Ajax实现无刷新操作.运行本实例,访问准备考试页面index.jsp,在该页面中,单击"开始考试"按钮,将打开新窗口显示开始考试的页面,如图10.1所示,页面会自动计时,当考试时间结束时,将自动提价试卷. 2.技术要点 主要是利用Ajax异步提交技术和Servlet技术实现的.显示在考试页面中的计时时间是在Servlet中设置的,需要通过Ajax的异步提交不断的请求Se

连载-基于插件技术的GIS应用框架(C# + ArcEngine9.3)(四)

问题描述 基于插件技术的GIS应用框架(C#+ArcEngine9.3)(四)-------------------------插件配置文件插件的配置.保存是GIS应用框架的一个重要内容,前述章节,我们介绍了本文框架中插件的保存是以XML来实现的,下面,我们就一个XML实例来说明插件是如何保存的.本文框架插件配置文件如下例:[img=http://static4.photo.sina.com.cn/middle/4c0b48dcgd7db06b5dd13&690][/img]从上面的插件配置文件

连载-基于插件技术的GIS应用框架(C# + ArcEngine9.3)(三)

问题描述 [align=center]基于插件技术的GIS应用框架(C#+ArcEngine9.3)(三)-------------------------插件的分类[/align]我们在进行GIS框架的开发时,有个问题必须先得明确下来,这就是你的插件具体有哪些表现形式,这直接关系到你的框架接口的设计.插件的加载及保存.具体一点,就是说,你的界面上将会出现哪些UI元素,如何进行管理.例如:Combobox.Edit.MenuItem诸如此类的插件.看过一些文章,大都具有子菜单的菜单项和工具栏都当

连载-基于插件技术的GIS应用框架(C# + ArcEngine9.3)(二)

问题描述 [align=center]基于插件技术的GIS应用框架(C#+ArcEngine9.3)(二)-------------------------开发环境配置[/align]选用什么样的第三方组件库来进行插件的封装是开发GIS框架的一个重要问题,直接影响到你框架容器加载插件的方式和插件对象的管理机制:此外开发平台的选择也需要考虑,但是选择有很多种,本文论及的框架开发环境配置如下:一.VisualStudio2008个人觉得比VisualStudio2005运行稳定.二.ArcEngin

基于Ajax技术实现无刷新用户登录功能

代码如下: // JScript 文件 function usersLogon() { var userName = document.getElementById("txtuserName").value; var password = document.getElementById("txtpassword").value; var checkCode = document.getElementById("txtCheckCode").val

基于Ajax技术实现文件上传带进度条

1.概述 在实际的Web应该开发或网站开发过程中,经常需要实现文件上传的功能.在文件上传过程中,经常需要用户进行长时间的等待,为了让用户及时了解上传进度,可以在上传文件的同时,显示文件的上传进度条.运行本实例,如图1所示,访问文件上传页面,单击"浏览"按钮选择要上传的文件,注意文件不能超过50MB,否则系统将给出错误提示.选择完要上传的文件后,单击"提交"按钮,将会上传文件并显示上传进度. 2.技术要点 主要是应用开源的Common-FileUpload组件来实现分

创建基于AJAX技术的Scribble应用程序

简介 ASP.NET Atlas是一套丰富的类库,用于ASP.NET开发AJAX风格的应用程序.本文试图解说Atlas框架的一般性特征,由于Atlas是一个庞大的库,故本文集中探讨Atlas的两个最重要的特征: 1. 能够从客户端脚本中调用服务器端web服务 2. 使得开发跨浏览器兼容的JavaScript代码相当容易 通过对这两个特征的介绍,读者朋友可以熟悉Atlas类库的使用方法. 背景 MFC Scribble应用程序是学习MFC编程的著名例子之一.Scribble应用程序允许用户使用鼠标