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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值