三、描述
- Identity是客户端JavaScript用于了解消息将被置于何处的ID。
- Description是在服务器端呈现错误消息后的结果。
首先我们需要在继续流程映射之前,从Web描述符获得servlet映射配置。调用此流程后,应用程序将准备表单实例,此实例继承自AjaxForm类。这一处理管理AJAX验证,并且应进行检查以确定来自客户端的请求没有使用struts验证框架。其他在请求过程中执行的流程是流程填充(用于收集客户端发送到动作表单的信息)和流程验证(通过使用现有Struts验证框架中已经存在于AjaxValidationRequestProcessor的父类TilesRequestProcessor中的方法)。
来自TilesRequestProcessor的验证流程将调用所有基于struts验证框架的验证,并将动作错误存储到请求。我们需要仔细分析动作错误,并生成XML消息验证,此验证将被发送到客户端。因为我们希望更改支持验证的行为方式,所以验证流程应检查所用的验证框架的指示器(参见图3)。
使用JDOM作为处理引擎,生成XML消息。如图4所示,如果流程验证被调用,且验证框架的条件等同于AJAX验证框架,则流程将继续填充错误消息并构建XML消息验证。
ErrorMessageHandler
该类处理XML消息生成器的功能。此Java类将构建基于identity和description属性的XML消息。调用方调用了buildXMLMessage之后,它将准备文档并设置XML消息的根元素。此类还具有一个addNextXMLMessage函数,以将更多验证消息添加到XML(参见清单1)。
此流程方法将响应的内容类型设置为“text/xml”,并将XML消息作为字符串发送。AjaxValidationRequestProcessor代码上的流程函数如清单2所示。...
public void buildXMLMessage() throws ParserConfigurationException {
![]()
// initiate document builder to prepare the media of XML Message
this.rootElement = new Element(CONSTANT_MESSAGE);
![]()
addNextXMLMessage();
![]()
}
...
public void addNextXMLMessage() throws ParserConfigurationException {
![]()
// creating the xml message based on format above
Element identityElement = new Element(CONSTANT_IDENTITY);
![]()
identityElement.setAttribute(CONSTANT_NAME, this.identity);
![]()
Element descriptionElement = new Element(CONSTANT_DESCRIPTION);
descriptionElement.addContent(this.description);
identityElement.addContent(descriptionElement);
rootElement.addContent(identityElement);
}
public void process(HttpServletRequest req, HttpServletResponse resp)
throws IOException, ServletException
{
if ( request.getParameter(CONSTANT_VALIDATION_FRAMEWORK_ARG) != null )
{
...
this.processValidate(req, resp, form, mapping);
response.setContentType(CONSTANT_XML_CONTENT_TYPE);
response.getWriter().write(sbXMLMessage.toString());
response.flushBuffer();
![]()
}
} else
{
super.process(req, resp);
}
}
processValidation方法将填充
动作错误,并基于面向客户端的XML格式契约构建消息。AjaxValidationRequestProcessor代码上的processValidation函数如下所示: