Struts2表单数据校验
前台校验
也称之为客户端校验,主要是通过JavaScript编程的方式进行表单数据的验证。
后台校验
也称之为服务器端校验,这里指的是使用Struts2通过XML配置的方式进行表单数据的验证。
Struts2表单数据校验
1. Action继承ActionSupport(提供和表单同名的属性以及get和set)
public class UserAction extends ActionSupport {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
2. 重写validate方法
3. 使用this.addFieldError(“username”, “用户名不能为空!”);添加校验信息
package com.hyxd.action;
import com.hyxd.entity.User;
import com.hyxd.service.IUserService;
import com.hyxd.service.impl.UserServiceImpl;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
private IUserService service = new UserServiceImpl();
@Override
public void validate() {
if(user.getUserName()==null || "".equals(user.getUserName())){
super.addFieldError("userName", "用户名不能为空");
}
if(user.getPassword()==null || "".equals(user.getPassword())){
super.addFieldError("password", "密码不能为空");
}
}
public String login(){
try {
User userInfo = service.login(user);
if(userInfo==null){
return INPUT;
}
ActionContext.getContext().getSession().put("userInfo", userInfo);
return "login";
} catch (Exception e) {
return ERROR;
}
}
}
4. 使用显示指定校验信息
<%@ 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" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>登录</title>
<style type="text/css">
<!--
.STYLE1 {
font-family: "微软雅黑";
font-size: 18px;
}
.STYLE4 {font-family: "微软雅黑"; font-size: 14px; }
-->
</style>
</head>
<body>
<form name="formUserAction" method="post" action="${pageContext.request.contextPath }/user_login">
<table width="301" height="144" border="1" align="center">
<tr>
<td colspan="3" align="center" valign="middle"><span class="STYLE1">登 录</span></td>
</tr>
<tr>
<td width="149" align="left" valign="middle"><span class="STYLE4">用户名:</span></td>
<td width="231" colspan="2" align="left" valign="middle"><label>
<input type="text" name="user.userName" />
</label></td>
</tr>
<tr>
<td align="left" valign="middle"><span class="STYLE4">密码:</span></td>
<td colspan="2" align="left" valign="middle"><label>
<input type="text" name="user.password" />
</label></td>
</tr>
<tr>
<td colspan="3" align="right" valign="middle"><label>
<input type="submit" name="Submit" value="提交" />
</label></td>
</tr>
<!-- 显示错误信息 -->
<s:fielderror fieldName="userName"></s:fielderror>
<s:fielderror fieldName="password"></s:fielderror>
</table>
</form>
</body>
</html>
默认validate()校验Action中的所有方法,如果用户要单击注册超链接访问注册页面的时候该方法就会执行校验无法跳转。所以需要重写validateXxx(),如果只是需要校验login方法那么就是validateLogin()
Struts2配置方式数据校验
校验的XML配置文件
0. 该配置文件验证的xml文件的规范在xwork-core-2.1.6.jar包下的:xwork-validator-1.0.3.dtd
1. 命名方式ActionClassName-validation.xml 放置在同Action的包下,引入DTD规范的时候参见0步骤中的约束文件
2. 配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="user.userName">
<field-validator type="requiredstring">
<message>用户名不能为空</message>
</field-validator>
</field>
<field name="user.password">
<field-validator type="requiredstring">
<message>密码不能为空</message>
</field-validator>
</field>
</validators>
3. 校验器的类型参见以下文件
xwork-core-2.1.6.jar\com\opensymphony\xwork2\validator\validators\default.xml
如何配置校验器?
直接API中查看校验器即可在文档中查看到XML的配置校验方式拷贝即可。
required: 确保某给定字段的值不是空值 null
requiredstring: 确保某给定字段的值既不是空值 null, 也不是空白.trim 参数. 默认为 true, 表示 struts 在验证该字段值之前先剔除前后空格.
stringlength: 验证一个非空的字段值是不是有足够的长度.
minLength: 相关字段的最小长度. 若没有给出这个参数, 该字段将没有最小长度限制
maxLength:相关字段的最大长度. 若没有给出这个参数, 该字段将没有最大长度限制
trim: 在验证之前是否去除前后空格
int: 检查给定字段的值是否可以被转换为一个整数且在一定范围
min: 相关字段的最小值. 若没给出这个参数, 该字段将没有最小值限制
max: 相关字段的最大值. 若没给出这个参数, 该字段将没有最大值限制
date: 确保某给定日期字段的值落在一个给定的范围内
max:相关字段的最大值. 若没给出这个参数, 该字段将没有最大值限制
min:相关字段的最小值. 若没给出这个参数, 该字段将没有最小值限制
email: 检查给定 String 值是否是一个合法的 email
url: 检查给定 String 值是否是一个合法的 url
regex: 检查某给定字段的值是否与一个给定的正则表达式模式相匹配.
expresssion*: 用来匹配的正则表达式
caseSensitive: 是否区分字母的大小写. 默认为 true
trim: 是否去除前后空格. 默认为 true
conversion: 转换校验器,指定在类型转换失败时,提示的错误信息
visitor: 用于校验action中的复合属性,它指定一个校验文件用于校验复合属性中的属性
expression: OGNL表达式校验器,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过,该校验器不可用在字段校验器风格的配置中
double: 双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值
Struts2内置的数据校验器校验规则配置
<!-- required 必填校验器-->
<field-validator type="required">
<message>性别不能为空!</message>
</field-validator>
<!-- requiredstring 必填字符串校验器-->
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不能为空!</message>
</field-validator>
<!-- stringlength 字符串长度校验器-->
<field-validator type="stringlength">
<param name="maxLength">10</param>
<param name="minLength">2</param>
<param name="trim">true</param>
<message><![CDATA[产品名称应在2-10个字符之间]]></message>
</field-validator>
<!-- int 整数校验器-->
<field-validator type="int">
<param name="min">1</param>
<param name="max">120</param>
<message>年龄必须在1-120之间</message>
</field-validator>
<!-- 字段OGNL表达式校验器-->
<field name="imagefile">
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[imagefile.length() <= 0]]></param>
<message>文件不能为空</message>
</field-validator>
</field>
<!-- email 邮件地址校验器-->
<field-validator type="email">
<message>电子邮件地址无效</message>
</field-validator>
<!-- regex 正则表达式校验器-->
<field-validator type="regex">
<param name="expression"><![CDATA[^13\d{9}$]]></param>
<message>手机号格式不正确!</message>
</field-validator>
当为某个action提供了ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml两种规则的校验文件时,系统按下面顺序寻找校验文件:
1、AconClassName-validation.xml
2、ActionClassName-ActionName-validation.xml
系统寻找到第一个校验文件时还会继续搜索后面的校验文件,当搜索到所有校验文件时,会把校验文件里的所有校验规则汇总,然后全部应用于处理方法的校验。如果两个校验文件中指定的校验规则冲突,则只使用后面文件中的校验规则。
当action继承了另一个action,父类action的校验文件会先被搜索到。假设UserAction继承BaseAction, UserAction在struts.xml的配置如下:
<action name="user" class="cn.itcast.action.UserAction" method="{1}">
.....
</action>
访问上面名为user的action,系统先搜索到BaseAction-validation.xml, BaseAction-user-validation.xml,接着搜索到UserAction-validation.xml, UserAction-user-validation.xml。校验规则是这四个文件的总和。