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类中实现的,代码如下:
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>

在上面的代码中,使用了Struts2tag<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教程5:使用Validation框架验证数据


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

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

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

posted on 2008-04-17 15:17 银河使者 阅读(4968) 评论(7)  编辑  收藏 所属分类: Struts2 原创

评论

# re: Struts2教程4:使用validate方法验证数据 2008-06-05 16:32 nihao955

谢谢,学习了.  回复  更多评论   

# re: Struts2教程4:使用validate方法验证数据[未登录] 2008-07-21 09:15 风中叶

很不错的学习教程  回复  更多评论   

# re: Struts2教程4:使用validate方法验证数据 2008-12-07 12:41 leonone23

回帖是一种美德,  回复  更多评论   

# re: Struts2教程4:使用validate方法验证数据 2009-01-21 16:37 Hadis

thanks  回复  更多评论   

# re: Struts2教程4:使用validate方法验证数据 2009-06-08 14:11 横行

谢谢,学习中。。。  回复  更多评论   

# re: Struts2教程4:使用validate方法验证数据 2009-08-11 13:29 五角

lz,在这个例子中我加了namespace
<package name="demo" extends="struts-default" namespace="/mystruts">
返回路径是这样写的:<result name="input">sum.jsp</result>
之后会报The requested resource (/mystruts/sum.jsp) is not available.
的错误,它自动在jsp页面前加了一个namespace
请问lz怎么解决?谢谢
  回复  更多评论   

# re: Struts2教程4:使用validate方法验证数据 2009-10-22 13:36 haozi

好帖  回复  更多评论   


专题:Android  iPad  jQuery  Chrome OS

博客园首页  IT新闻  知识库  学英语  Java程序员招聘
标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录      
每天10分钟,轻松学英语


网站导航:
 
<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

导航

统计

公告

我的其他blog

http://nokiaguy.cnblogs.com
http://blog.csdn.net/nokiaguy

我的著作





正在读的书




常用链接

留言簿(31)

我参与的团队

随笔分类(662)

随笔档案(255)

文章分类(1)

文章档案(4)

相册

ADSL、3G查询

CSDN

eclipse

ibm

Java EE

Linux

Web

云服务

代理网站

关注的网站

喜欢的Blog

图书出版

开发工具

手机铃声

操作系统

数学

文件格式

源码资源

移动(Mobile)

编程语言

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜