Struts2手工编写表单验证代码

7 篇文章 0 订阅

原文链接:http://www.cnblogs.com/Laupaul/archive/2012/03/15/2398008.html

输入校验流程
1、类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性
2、如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息添加到filedErrors里。不管类型转换是否出现异常,都会进入第3步。
3、系统通过反射技术调用action中的ValidateXxx()方法,Xxx为action里面的方法名。
4、再调用action中的alidate()方法。
5、经过上面4步,如果系统中的filedErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发到名称为input的视图。如果系统中的filedErrors没有任何错误信息,系统将执行action中的处理方法。

index.jsp

<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Struts2手工编写代码实现对Action中所有方法输入校验</title>
  </head>
  
  <body>
      <form action="message_update" method="post"> 
          用户名:<input type="text" name="username" /><br/>
          手机号码:<input type="text" name="mobile"/><br/>
          <input type="submit" value="提交" />
      </form>
      <s:fielderror />
  </body>
</html>
success.jsp

<%@ page language="java" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>结果</title>
  </head>
  
  <body>
  ${message }
  </body>
</html>
struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <!-- Add packages here -->
    <package name="default" namespace="/" extends="struts-default">
        <action name="message_*" method="{1}" class="cn.validate.action.MessageAction">
            <result name="input">/index.jsp</result>
            <result name="success">/success.jsp</result>
        </action>
    </package>
</struts>
MessageAction.java

package cn.validate.action;

import java.util.regex.Pattern;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class MessageAction extends ActionSupport {
    private String username;
    private String mobile;

    public void setUsername(String username) {
        this.username = username;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String update() {
        ActionContext.getContext().put("message", "update success!");
        return "success";
    }

    public String sace() {
        ActionContext.getContext().put("message", "save success!");
        return "success";
    }

    @Override
    public void validate() {
        // 重写ActionSupport的alidate方法
// 验证提交数据是否合法
        if (this.username == null || "".equals(this.username.trim())) {
            this.addFieldError("username", "用户名不能为空!");
        }

        if (this.mobile == null || "".equals(this.mobile.trim())) {
            this.addFieldError("moblie", "手机号码不能为空!");
        } else {
            //正则表达式判断手机号码的输入格式是否正确
            if (!Pattern.compile("^1[358]\\d{9}$").matcher(this.mobile)
                    .matches()) {
                this.addFieldError("mobile", "手机号码输入格式不正确!");
            }
        }
    }

}
validate方法会校验action里面所有的方法,当某个数据校验失败时,我们应该调用addFiledError()方法添加校验失败信息,Struts2会将请求发送到名为input的result,在input视图中,我们用<s:filederror />显示失败信息。当然,这不符合逻辑,那么我们怎么指定方法校验呢?很简单,我们只需要用validateXxx()校验即可   Xxx代表Action里面你要校验的方法名,首字母大写。看代码:

    public void validateUpdate() {
        // 验证提交数据是否合法
        if (this.username == null || "".equals(this.username.trim())) {
            this.addFieldError("username", "用户名不能为空!");
        }

        if (this.mobile == null || "".equals(this.mobile.trim())) {
            this.addFieldError("moblie", "手机号码不能为空!");
        } else {
            //正则表达式判断手机号码的输入格式是否正确
            if (!Pattern.compile("^1[358]\\d{9}$").matcher(this.mobile)
                    .matches()) {
                this.addFieldError("mobile", "手机号码输入格式不正确!");
            }
        }











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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值