`
netsky_cheng
  • 浏览: 28586 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

此刻打盹,你将做梦;而此刻学习,你将圆梦。

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

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

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

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

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

以上三个 add 方法都在 ValidationAware 接口中定义,并且在 ActionSupport 类中有一个默认的实现。其实,在 ActionSupport 类中的实现实际上是调用了 ValidationAwareSupport 中的相应的方法,也就是这三个 add 方法是在 ValidationAwareSupport 类中实现的,代码如下:

private   final  ValidationAwareSupport validationAware  =   new  ValidationAwareSupport();

public   void  addActionError(String anErrorMessage) 
{      validationAware.addActionError(anErrorMessage);
}
public   void  addActionMessage(String aMessage) 
{
    validationAware.addActionMessage(aMessage);
}
public   void  addFieldError(String fieldName, String errorMessage) 
{
    validationAware.addFieldError(fieldName, errorMessage);
}

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

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

 

< %@ page  language ="java"  import ="java.util.*"  pageEncoding ="GBK" % >
< %@ taglib  prefix ="s"  uri ="/struts-tags"  % >
< html >
  
< head >
    
< title > 验证数据 </ title >
  
</ head >
  
  
< body >
    
< s:actionerror />
    
< s:actionmessage />
    
< s:form  action ="validate.action"   theme ="simple" >
        输入内容:
< s:textfield  name ="msg" />
         
< s:fielderror  key ="msg.hello"   />
         
< br />  
        
< s:submit />
    
</ s:form >
  
</ body >
</ html >

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

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

 

package  action;

import  javax.servlet.http. * ;

import  com.opensymphony.xwork2.ActionSupport;
import  org.apache.struts2.interceptor. * ;

public   class  ValidateAction  extends  ActionSupport
{
    
private  String msg;
    
public  String execute() 
    {
        System.out.println(SUCCESS);
        
return  SUCCESS;
    }
    
public   void  validate()
    {
        
if ( ! msg.equalsIgnoreCase( " hello " ))
        {
            System.out.println(INPUT);
            
this .addFieldError( " msg.hello " " 必须输入hello! " );
            
this .addActionError( " 处理动作失败! " );
        }
        
else
        {
            
this .addActionMessage( " 提交成功 " );
        }
    }
    
public  String getMsg()
    {
        
return  msg;
    }
    
public   void  setMsg(String msg)
    {
        
this .msg  =  msg;
    }
}


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

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

< package  name ="demo"  extends ="struts-default" >
    
< action  name ="validate"  class ="action.ValidateAction" >
        
< result  name ="success" > /error/validate.jsp </ result >
        
< result  name ="input" > /error/validate.jsp </ result >
    
</ action >
</ package >

 

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

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

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

 

package  com.opensymphony.xwork2;

import  java.util.Collection;
import  java.util.Map;

public   interface  ValidationAware
{
    
void  setActionErrors(Collection errorMessages);
    Collection getActionErrors();

    
void  setActionMessages(Collection messages);
    Collection getActionMessages();
    
void  setFieldErrors(Map errorMap);
    Map getFieldErrors();
    
void  addActionError(String anErrorMessage);
    
void  addActionMessage(String aMessage);
    
void  addFieldError(String fieldName, String errorMessage);
    
boolean  hasActionErrors();
    
boolean  hasActionMessages();
    
boolean  hasErrors();
    
boolean  hasFieldErrors();
}


分享到:
评论

相关推荐

    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