struts2 基于XML配置方式实现输入校验

对action的所有方法进行输入校验

使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校验文件,校验文件和action类放在同一包下,文件取名格式为:ActionClassName-validation.xml,其中ActionClassName为action的简单类名(不包括包名),-validation为固定写法。如果action类为com.siln.action.PersonAction,那么文件该取名为:PersonAction-validation.xml。

    PersonAction-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
  		"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
	<field name="username">
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<message>姓名不能为空</message>
		</field-validator>
	</field>
	<field name="mobile">
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<message>手机号不能为空</message>
		</field-validator>
		<field-validator type="regex">
			<param name="expression"><![CDATA[^1[358]\d{9}]]></param>
			<message>手机号码格式不正确</message>
		</field-validator>
	</field>
	
</validators>

  <field>指定action中要校验的属性,<field-validator>指定校验器,上面指定的校验器requirestring是由系统提供的,系统提供了能满足大部分校验需求的校验器,这些校验器的定义可以在xwork-2.x.jar中的com.opensymphony.xwork2.validator.validators下的default.xml中找到。

   <message>为校验失败后的提示信息,如果需要国际化,可以为message指定key属性,key的值为资源文件中的key。

     在这个校验文件中,对action中字符串类型的username属性进行校验,首先要求调用trim()方法去掉空格,然后判断用户名是否为空。

package com.siln.action;

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

@SuppressWarnings("serial")
public class PersonAction extends ActionSupport{
  
	private String username;
	private String mobile;
	
	public String update() {
		ActionContext.getContext().put("message", "更新成功");
		return "success";
	}
	
	public String save() {
		ActionContext.getContext().put("message", "保存成功");
		return "success";
	}
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getMobile() {
		return mobile;
	}
	public void setMobile(String mobile) {
		this.mobile = mobile;
	}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>首页</title>
</head>
<body>
<s:fielderror></s:fielderror>
 <form action="${pageContext.request.contextPath}/person/personAction_save.action" method="post">
 姓名:<input type="text" name="username"><br>
 手机号:<input type="text" name="mobile"><br>
 <input type="submit" value="提交">
 </form>
</body>
</html>

基于XML配置方式对指定action方法实现输入校验

当校验文件的取名为ActionClassName-validation.xml时,会对 action中的所有处理方法实施输入验证。如果你只需要对action中的某个action方法实施校验,那么,校验文件的取名应为:ActionClassName-ActionName-validation.xml,其中ActionName为访问该action的名称。例如:在实际应用中,常有以下配置:
<action name="user_*" class="cn.itcast.action.UserAction" method="{1}“ >
 <result name="success">/WEB-INF/page/message.jsp</result>
 <result name="input">/WEB-INF/page/addUser.jsp</result>
</action>
UserAction中有以下两个处理方法:
public String add() throws Exception{
   ....
}
public String update() throws Exception{
   ....
}
要对add()方法实施验证,校验文件的取名为: UserAction-user_add-validation.xml
要对update()方法实施验证,校验文件的取名为: UserAction-user_update-validation.xml


基于XML校验的一些特点

当应用为某个action提供了两种规则的校验文件ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml,系统按下面顺序寻找校验文件:
1、ActionClassName-validation.xml
2、ActionClassName-ActionName-validation.xml
系统寻找到第一个校验文件时还会继续搜索后面的校验文件,当搜索到所有校验文件时,会把校验文件里的所有校验规则汇总,然后全部应用于action方法的校验。如果两个校验文件中指定的校验规则冲突,则只使用后面文件中的校验规则。

当action继承了另一个action,父类action的校验文件会先被搜索到。

假设UserAction继承BaseAction:
<action name="user" class="cn.itcast.action.UserAction" method="{1}">
</action>
访问上面action,系统先搜索父类的校验文件:BaseAction-validation.xml, BaseAction-user-validation.xml,接着搜索子类的校验文件: UserAction-validation.xml, UserAction-user-validation.xml。应用于上面action的校验规则为这四个文件的总和。

猜你喜欢

转载自slnddd.iteye.com/blog/1769205
今日推荐