龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

使用AJAX的Struts验证框架(1)(2)

时间:2013-03-06 14:58来源:未知 作者:admin 点击:
分享到:
ErrorMessageHandler 该类处理XML消息生成器的功能。此Java类将构建基于identity和description属性的XML消息。调用方调用了buildXMLMessage之后,它将准备文档并设置X
ErrorMessageHandler

该类处理XML消息生成器的功能。此Java类将构建基于identity和description属性的XML消息。调用方调用了buildXMLMessage之后,它将准备文档并设置XML消息的根元素。此类还具有一个addNextXMLMessage函数,以将更多验证消息添加到XML(参见清单1)。

清单1

...
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);
}

此流程方法将响应的内容类型设置为“text/xml”,并将XML消息作为字符串发送。AjaxValidationRequestProcessor代码上的流程函数如清单2所示。

清单2

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函数如下所示:

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

客户端场景 构建标签库组件

  • AjaxJavaScriptLibraryTag:此标签库组件在客户端呈现JavaScript功能,以实现基本XMLHTTP控制器功能。
  • AjaxErrorHtmlRenderTag:此标签库组件在JSP页面呈现错误消息区域。
配置标签库定义

开发出标签库组件之后,我们需要配置清单3中显示的标签库tld文件。

清单3

 
1.0
1.1
ajaxLib


library
net.sf.ajax.taglib.AjaxJavaScriptLibrary

JSP



error
net.sf.ajax.taglib.AjaxErrorHtmlRender

JSP

property
true
true


event
true
true




构建JSP和Struts配置

要模拟验证处理的结果,我们首先需要构建呈现层,方法是合并我们已经构建的标签库。在此例中,我试图给出一个示例验证(通过使用来自Struts的验证规则组件)以及来自表单本身的验证。准备五个JSP页面下的文本框。第一个到第四个文本框使用验证规则配置,第五个文本框使用来自动作表单的验证流程。除此之外,我们还需要一个提交按钮,以在提交表单后模拟它,现有的struts验证仍在没有AJAX的情况下工作。用户界面外观如图5所示。

图5

图5

精彩图集

赞助商链接