基于AJAX技术实现Struts校验框架(2)
http://www.sina.com.cn 2006年04月20日 15:35
天极yesky
三、 服务器端
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.控制器处理流程 |