Struts2之手工编码方式进行输入校验

输入校验的流程

1、类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性

2、如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息封装到fieldError里。不管类型转换是否出现异常,都会进入第3步。

3、系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。

4、再调用action中的validate()方法

5、经过上面4步,如果系统中的fieldError存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的fieldError没有任何错误信息,系统将执行action中的处理方法。

在struts2中,我们可以实现对action的所有方法进行校验,也可以实现对action的指定方法进行校验。

对于输入校验struts2提供两种实现方法:

1、采用手工编写代码实现

2、基于XML配置方式实现

相对于第一种,第二种用起来比较方便。

登录页面index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>输入校验</title>
</head>

<body>
    <s:fielderror/>
	<form action="${pageContext.request.contextPath}/control/manage_save.action" method="post">
		管理用户名:<input type="text" name="username" />不能为空<br>
		手机号码:<input type="text" name="mobilephone" /> 不能为空,并且要符合手机号码格式1,3/5/8,后面9位数字<br>
			<input type="submit" value="提交" />
	</form>
</body>
</html>
package struts2.validate.action;

import java.util.regex.Pattern;

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

public class PersonAction extends ActionSupport{

	private String username;
	private String mobilephone;

	public String getUsername() {
		return username;
	}

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

	public String getMobilephone() {
		return mobilephone;
	}

	public void setMobilephone(String mobilephone) {
		this.mobilephone = mobilephone;
	}

	public String update() {
		ActionContext.getContext().put("message", "更新成功!");
		return "message";
	}

	public String save() {
		ActionContext.getContext().put("message", "保存成功");
		return "message";
	}

	//对action中的所有方法校验
	@Override
	public void validate() {
		if(this.username==null || this.username.trim().equals("")){
			this.addFieldError("username", "用户名不能为空!");
		}
		if(this.mobilephone==null || this.mobilephone.equals("")){
			this.addFieldError("mobilephone", "手机号不能为空!");
		}else{
			if(!Pattern.compile("^1[358]\\d{9}$").matcher(mobilephone).matches()){
				this.addFieldError("mobilephone", "手机号格式不正确!");
			}
		}
		super.validate();
	}

}
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>结果</title>
  </head>

  <body>
    ${message}
  </body>
</html>

通过重写validate()方法实现,validate()方法会校验action中所有与execute方法签名相同的方法。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息

<?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>
	<package name="csdn" namespace="/control" extends="struts-default">
        <action name="manage_*" class="struts2.validate.action.PersonAction" method="{1}">
           <result name="message">/WEB-INF/page/message.jsp</result>
           <result name="input">/index.jsp</result>
        </action>
	</package>
</struts>

validate()方法会对action中的所有方法进行校验,如果只需要对指定方法进行校验,可通过重写validateXxx()方法实现,validateXxx()只会校验action中方法名为Xxx()的方法。其中Xxx()的第一个字母要大写。其他配置书写步骤和写validate()方法一样。

时间: 2024-08-02 07:01:22

Struts2之手工编码方式进行输入校验的相关文章

Struts2输入校验(编码方式)

struts2对用户输入数据的校验方法有两种方式,一种是通过编码的方式,另一种则是通过使用XML配置方式. 本章主要介绍struts2编码方式的输入校验.以下将结合一个实例程序进行说明. 代码结构: 关键代码: RegistAction.javapackage com.alfred.regist.action; import java.text.SimpleDateFormat; import java.util.Date; import com.opensymphony.xwork2.Acti

Struts2之基于XML方式进行数据输入校验

使用基于XML配置方式实现输入校验时,action也要继承ActionSupport,并且提供校验文件,校验文件和action类放在同一个包下,文件的取名格式为:ActionClassName-validate.xml,其中ActionClassName为简单类名,-validate为固定写法. 输入页面index.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-

转载 - Struts2基于XML配置方式实现对action的所有方法进行输入校验

出处:http://www.cnblogs.com/Laupaul/archive/2012/03/15/2398360.html 使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校验文件,校验文件和action类放在同一个包下,文件的取名格式为:ActionClassName-validation.xml.ActionClassName为action的简单类名,-validation为固定写法.如果Action类为cn.validate.acti

JAVAWEB开发之Struts2详解(二)——Action接受请求参数、类型转换器、使用Struts2的输入校验、以及遵守约定规则实现Struts2的零配置

Action接受请求参数 作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中 Struts2提供了非常强大的类型转换机制用于请求数据 到 model对象的封装 Struts2和MVC定义关系 StrutsPrepareAndExecuteFilter:控制器 在Struts2中action是什么?(Struts2是一个MVC框架) V:jsp M:action C:action StrutsPrepareAndExecuteFilter Struts2提供了三种数据封装

strut2 输入校验2

struts2基于xml配置方式对Action中的所有方法进行的输入校验: 使用xml方式配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校验文件,校验文件和action类放在同一个包下.文件的取名为ActionClassName-validation.xml,其中ActionClassName为action类的简单类名,validation为固定写法.如果Action类为cn.itcast.UsrAction,那么文件名为UserAction-validati

Struts2输入校验(XML方式)

本章主要介绍struts2的XML配置方式输入校验.以下将结合一个实例程序进行说明. 代码结构: 关键代码: RegistAction.javapackage com.alfred.regist.action; import java.util.Date; import com.opensymphony.xwork2.ActionSupport; public class RegistAction extends ActionSupport { private static final long

Struts2输入校验之validate输入校验方式

一.在Web系统项目中有大量的视图页面需要用户自行输入很多数据.这些数据的类型有很多种.为了防止某些客户的恶意输入以及对Web项目的恶意破坏,必须引入输入校验,像Windows操作系统的防火墙一样把一些垃圾数据过滤掉,挡在Web系统之外.接下来就来介绍一下validate输入校验方式: 1.validate方法进行输入校验:这里直接附上一个简单的用户注册功能具体介绍利用validate方法对数字.字符串.日期等类型数据进行输入校验方式介绍: (1).首先,新建一个Struts2项目InputVa

struts2(七)输入校验

输入校验简述 由于Web应用的开放性,网络上所有浏览者都能够自由地使用该应用,这样该应用通过输入页面收集的数据可能很复杂,不仅会包含正常用户的误输入,还可能包含恶意用户的恶意输入.因此应用系统需要将这些非法输入阻止在应用之外. 异常输入,可能导致系统非正常中断,严重者会导致系统崩溃.应用程序需要正常处理表现层接受的各种数据,通常的做法是遇到异常输入时应用程序直接返回,提示浏览者必须重新输入,也就是将那些异常输入过滤掉.绝对异常输入的过滤,就是输入校验,也称为数据校验. 输入校验分为客户端校验和服

Struts2的输入校验

Struts2提供了基于验证框架的输入校验,在这种校验方式下,所有的输入校验只需要编写简单的配置文件,Struts2的验证框架将会负责进行服务器校验和客户端校验. 校验失败后将Struts2将自动返回名为“input”的Result,如需制定错误显示页面,则通过struts.xml来配置“input”的Result.在Result视图中使用<s:fielderror/>标签即可输入校验失败的提示信息. User.java package models; import java.util.Dat