`
seara
  • 浏览: 629598 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Struts2教程4:使用validate方法验证数据

阅读更多
本文为原创,如需转载,请注明作者和出处,谢谢!

上一篇:Struts2教程3:struts.xml常用配置解析

Struts2中最简单的验证数据的方法是使用validate。我们从ActionSupport类的源代码中可以看到,ActionSupport类实现了一个Validateable接口。这个接口只有一个validate方法。如果Action类实现了这个接口,Struts2在调用execute方法之前首先会调用这个方法,我们可以在validate方法中验证,如果发生错误,可以根据错误的level选择字段级错误,还是动作级错误。并且可使用addFieldErroraddActionError加入相应的错误信息,如果存在ActionField错误,Struts2会返回“input”(这个并不用开发人员写,由Struts2自动返回),如果返回了“input”,Struts2就不会再调用execute方法了。如果不存在错误信息,Struts2在最后会调用execute方法。

这两个add方法和ActionErrors类中的add方法类似,只是add方法的错误信息需要一个ActionMessage对象,比较麻烦。除了加入错误信息外,还可以使用addActionMessage方法加入成功提交后的信息。当提交成功后,可以显示这些信息。

以上三个add方法都在ValidationAware接口中定义,并且在ActionSupport类中有一个默认的实现。其实,在ActionSupport类中的实现实际上是调用了ValidationAwareSupport中的相应的方法,也就是这三个add方法是在ValidationAwareSupport类中实现的,代码如下:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->privatefinalValidationAwareSupportvalidationAware=newValidationAwareSupport();

publicvoidaddActionError(StringanErrorMessage)
{validationAware.addActionError(anErrorMessage);
}
publicvoidaddActionMessage(StringaMessage)
{
validationAware.addActionMessage(aMessage);
}
publicvoidaddFieldError(StringfieldName,StringerrorMessage)
{
validationAware.addFieldError(fieldName,errorMessage);
}

下面我们来实现一个简单的验证程序,来体验一个validate方法的使用。

先来在Web根目录建立一个主页面(validate.jsp),代码如下:


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><%@pagelanguage="java"import="java.util.*"pageEncoding="GBK"%>
<%@taglibprefix="s"uri="/struts-tags"%>
<html>
<head>
<title>验证数据</title>
</head>

<body>
<s:actionerror/>
<s:actionmessage/>
<s:formaction="validate.action"theme="simple">
输入内容:
<s:textfieldname="msg"/>
<s:fielderrorkey="msg.hello"/>
<br/>
<s:submit/>
</s:form>
</body>
</html>

在上面的代码中,使用了Struts2tag<s:actionerror><s:fielderror><s:actionmessage>,分别用来显示动作错误信息,字段错误信息,和动作信息。如果信息为空,则不显示。

现在我们来实现一个动作类,代码如下:


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->packageaction;

importjavax.servlet.http.*;

importcom.opensymphony.xwork2.ActionSupport;
importorg.apache.struts2.interceptor.*;

publicclassValidateActionextendsActionSupport
{
privateStringmsg;
publicStringexecute()
{
System.out.println(SUCCESS);
returnSUCCESS;
}
publicvoidvalidate()
{
if(!msg.equalsIgnoreCase("hello"))
{
System.out.println(INPUT);
this.addFieldError("msg.hello","必须输入hello!");
this.addActionError("处理动作失败!");
}
else
{
this.addActionMessage("提交成功");
}
}
publicStringgetMsg()
{
returnmsg;
}
publicvoidsetMsg(Stringmsg)
{
this.msg=msg;
}
}

大家从上面的代码可以看出,Field错误需要一个key(一般用来表示是哪一个属性出的错误),而Action错误和Action消息只要提供一个信息字符串就可以了。

最后来配置一下这个Action,代码如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><packagename="demo"extends="struts-default">
<actionname="validate"class="action.ValidateAction">
<resultname="success">/error/validate.jsp</result>
<resultname="input">/error/validate.jsp</result>
</action>
</package>

假设应用程序的上下文路径为demo,则可通过如下的URL来测试程序:

http://localhost:8080/demo/validate.jsp

我们还可以使用ValidationAware接口的其他方法(由ValidationAwareSupport类实现)获得或设置字段错误信息、动作错误信息以及动作消息。如hasActionErrors方法判断是否存在动作层的错误,getFieldErrors获得字段错误信息(一个Map对象)。下面是ValidationAware接口提供的所有的方法:


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->packagecom.opensymphony.xwork2;

importjava.util.Collection;
importjava.util.Map;

publicinterfaceValidationAware
{
voidsetActionErrors(CollectionerrorMessages);
CollectiongetActionErrors();

voidsetActionMessages(Collectionmessages);
CollectiongetActionMessages();
voidsetFieldErrors(MaperrorMap);
MapgetFieldErrors();
voidaddActionError(StringanErrorMessage);
voidaddActionMessage(StringaMessage);
voidaddFieldError(StringfieldName,StringerrorMessage);
booleanhasActionErrors();
booleanhasActionMessages();
booleanhasErrors();
booleanhasFieldErrors();
}

下一篇:Struts2教程5:使用Validation框架验证数据


国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》发布

《Java Web开发速学宝典》出版,欢迎定购

分享到:
评论

相关推荐

    struts2教程,Struts2例子

    Struts2教程4:使用validate方法验证数据》中曾讲到使用validate方法来验证客户端提交的数据,但如果使用validate方法就会将验证代码和正常的逻辑代码混在一起

    struts2学习教程

    struts2学习教程包括:第一个Struts2程序,处理一个form多个submit,struts.xml常用配置解析,使用validate方法验证数据,使用Validation框架验证数据,在Action类中获得HttpServletResponse对象的四种方法,上传...

    struts2讲义_吴峻申

    第4章 另一Struts2核心技术:拦截器 47 4.1 拦截器在Struts2中的缺省应用 47 4.2 拦截器原理实现 50 4.3 在Struts2中配置自定义的拦截器 53 4.3.1 扩展拦截器接口的自定义拦截器配置 54 4.3.2 继承抽象拦截器的...

    Struts2中对输入数据进行验证源码

    源码加载好之后运行的url是...default.action,绝对能运行,我QQ:459789479,有问题可以问我,源码中包括:国际化、对输入数据进行验证、Struts2中处理验证码等技术,还有对输入数据进行验证的学习说明

    ajax_struts2_上传与下载_无刷新

    3. 在struts2的Action通过2种不同的实现方法返回json格式的字符串。 4. 针对商品实现简单无刷新上传与下载 4. 批量导入数据采用的是导入test文件夹下的测试压缩包upload.rar上传到服务器的临时目录,然后利用WinRar....

    Struts2_validate_6_8.rar_Java 8

    struts2详细验证输入数据的内容 非常方便和好用,对你一定价值

    struts2+ajaxForm

    ajax刷新表格数据 ajaxform异步提交表单数据, jquery.validate验证表单数据

    struts2_spring3_hibernate3_1.1

    1.使用struts2+spring3+hibernate3整合实现用户CRUD功能。 2.使用多种配置方式 A.将hibernate实体映射集成到spring配置文件中。 B.使用properties文件配置数据源 3.使用传统的配置文件集成框架。 A.视...

    Struts_开发的最佳实践

    要验证请求数据,ActionForm 的 validate() 方法必须给出一个特定于该情况的实现。ActionForm 作为运载工具,向 Action 类提供请求数据。一个 JSP 对象与各自的 ActionForm 对象相结合,构成应用程序的 View 层。在...

    ssh框架实现通讯录

    写的比较简陋,,基于struts1.2+spring2.0+hibernate3.1框架 基本功能: 注册,登陆,添加联系人,按类别查找联系人,删除联系人,登出 表单输入使用validate框架验证,权限管理使用 Filter+action拦截器,...

    Spring面试题

    并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的 Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet...

    struts+ajax

    这是博客文章http://blog.csdn.net/lenotang/archive/2008/10/01/3007894.aspx配套的源代码,里面主要涉及的知识点有Struts中I18N,数据验证,过滤器,以及ajax(利用prototype库)与Struts的集成。

    AnyFo - Struts 2_1爆胎易筋丸.pdf

    5.1 validate 方法验证...................................................................................................14 5.1.1 国际化文件................................................................

    北京大部分公司的ssh面试题

    并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet...

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

    学校公寓管理信息系统

    学校公寓管理系统基于B/S模式开发,使用...使用struts2+hibernate的框架来对数据的逻辑过程进行处理和对Mysql数据库的数据进行操作。采用了AJAX动态刷新和jQuery-validate验证框架,从而实现了学校公寓信息管理的功能。

    java面试题

    Struts的validate框架是如何验证的? 74 72.11. dispatchAction是用什么技术实现的? 74 72.12. struts2.0的mvc模式?与struts1.0的区别? 74 72.13. struts1.2和struts2.0的区别?如何控制两种框架中的单例模式? ...

    千方百计笔试题大全

    103、Struts的validate框架是如何验证的? 24 104、说下Struts的设计模式 24 105、spring工作机制及为什么要用? 24 106、HttpSession session = request.getSession() 24 107、getParameter与 getAttribute的区别? ...

    java面试宝典

    103、Struts的validate框架是如何验证的? 24 104、说下Struts的设计模式 24 105、spring工作机制及为什么要用? 24 106、HttpSession session = request.getSession() 24 107、getParameter与 getAttribute的区别? ...

Global site tag (gtag.js) - Google Analytics