struts2 输入验证(服务器端)
在struts2中,我们可以实现对action的所有方法进行校验或者对action的指定方法进行校验。
对于输入校验struts2提供了两种实现方法:
采用手工编写代码实现。
基于XML配置方式实现。
输入校验的流程:
1、类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。
2、如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息添加到fieldErrors里。不管类型转换是否出现异常,都会进入第3步。
3、系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。
4、再调用action中的validate()方法。
5、经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。
1.手工编写代码实现对action中所有方法输入校验
通过重写validate()方法实现, validate()方法会校验action中所有与execute方法签名相同的方法。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统的fieldErrors包含失败信息,Struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息。
验证例子如下:
package com.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
private String UserName;
private String message;
public String getUserName() {
return UserName;
}
public void setUserName(String userName) {
UserName = userName;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String execute(){
this.message = "验证通过";
return "success";
}
//重写validate()方法
public void validate() {
// TODO Auto-generated method stub
<span style="color:#FF0000;">if(UserName==null || UserName.equals("")){
this.addFieldError("UserName", "用户名不能为空");
}</span>
}
}<%@ 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>
<title>主页</title>
</head>
<body>
<span style="color:#FF0000;"><s:fielderror></s:fielderror></span>
<form method="post" action="/Validate/Validate/UserInfo">
用户名:<input type="text" name="UserName"/>
<input type="submit" value="提交"/>
</form>
${message}
</body>
</html><?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="Validate" namespace="/Validate" extends="struts-default">
<action name="UserInfo" class="com.action.UserAction" method="execute">
<span style="color:#FF0000;"><result name="input">/UserInfo.jsp</result></span>
<result name="success">/UserInfo.jsp</result>
</action>
</package>
</struts>2.基于XML配置方式实现对action的所有方法进行输入校验
使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校验文件,校验文件和action类放在同一个包下,文件的取名格式为:
ActionClassName-validation.xml
ActionClassName为action的简单类名
validation为固定写法
如果Action类为cn.itcast.UserAction,那么该文件的取名应为:UserAction-validation.xml。
<field>指定action中要校验的属性,<field-validator>指定校验器,上面指定的校验器requiredstring是由系统提供的,系统提供了能满足大部分验证需求的校验器,这些校验器的定义可以在xwork-2.x.jar中的com.opensymphony.xwork2.validator.validators下的default.xml中找到。
<message>为校验失败后的提示信息,如果需要国际化,可以为message指定key属性,key的值为资源文件中的key。
在这个校验文件中,对action中字符串类型的username属性进行验证,首先要求调用trim()方法去掉空格,然后判断用户名是否为空。
例子如下:
package com.action;
import com.opensymphony.xwork2.ActionSupport;
public class <span style="color:#FF0000;">UserAction</span> extends ActionSupport{
private String UserName;
private String message;
public String getUserName() {
return UserName;
}
public void setUserName(String userName) {
UserName = userName;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String execute(){
this.message = "验证通过";
return "success";
}
// //重写validate()方法
// public void validate() {
// // TODO Auto-generated method stub
// if(UserName==null || UserName.equals("")){
// this.addFieldError("UserName", "用户名不能为空");
// }
// }
}
UserAction-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>
</validators>
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>
<package name="ValidateXml" namespace="/ValidateXml" extends="struts-default">
<action name="UserInfo" class="com.action.UserAction" method="execute">
<result name="input">/UserInfo.jsp</result>
<result name="success">/UserInfo.jsp</result>
</action>
</package>
</struts>struts2提供的校验器列表
系统提供的校验器如下:
required:必填校验器,要求field的值不能为null
requiredstring:必填字符串校验器,要求field的值不能为null,并且长度大于0,默认情况下会对字符串去前后空格
stringlength:字符串长度校验器,要求field的值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格
regex:正则表达式校验器,检查被校验的field是否匹配一个正则表达式.expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true
int:整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值
double:双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值
fieldexpression:字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过。
email:邮件地址校验器,要求如果field的值非空,则必须是合法的邮件地址
url:网址校验器,要求如果field的值非空,则必须是合法的url地址
date:日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值
conversion:转换校验器,指定在类型转换失败时,提示的错误信息
visitor:用于校验action中的复合属性,它指定一个校验文件用于校验复合属性中的属性
expression:OGNL表达式校验器,expression参数用于指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时,校验通过,否则不通过,该校验器不可用在字段校验器风格的配置中

浙公网安备 33010602011771号