struts2验证简介:基于struts2拦截器为开发者提供一套验证框架,并且可扩展,一般验证都支持
a.继承ActionSupport类
b.修改struts2.xml文件:删除method属性
c.在需要验证的Action类的相同包下,写一个"类名-validation.xml"文件
d.在"类名-validation.xml"文件加入头信息以具有提示功能
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
e."类名-validation.xml"文件验证代码示例
<!--1.验证字符串是否为空-->
<field name="name">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名必填</message>
</field>
<!--2.验证字符串的长度(去掉两端空格)-->
<field name="name">
<field-validator type="stringlength">
<param name="trim">true</param>
<param name="maxLength">10</param>
<param name="minLength">4</param>
<message>去掉两端空格后,字符串长度应为4-10</message>
</field-validator>
</field>
<!--3.数字范围验证-->
<field name="age">
<field-validator type="int">
<param name="min">6</param>
<param name="max">10</param>
<message>age必须在 ${min} 和${max}之间</message>
</field-validator>
</field>
<!--4.表达式验证:不需要依托<field>节点-->
<validator type="expression">
<param name="expression"><![CDATA[name.equals(pwd)]]> </param>
<param name="expression"><![CDATA[age
== 100]]> </param>
<message> </message>
</validator>
<!--5.补充:表达式验证-->
<field name="pass">
<field-validator type="fieldexpression">
<!--指定逻辑表达式-->
<param name="expression"><![CDATA[age
== 100]]></param>
<message>年龄必须大于100</message>
</field-validator>
</field>
<!--6.非空(null)验证-->
<field name="birth">
<field-validator type="required">
<message>必须输入一个生日</message>
</field-validator>
</field>
<!--7.利用正则表达式验证-->
<field-validator type="regex">
一、内置验证
User.java
package com.java.model;
public class User {
private String userName;
private String name;
private int age;
private String email;
private String homePage;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getHomePage() {
return homePage;
}
public void setHomePage(String homePage) {
this.homePage = homePage;
}
@Override
public String toString() {
return "User [userName=" + userName + ", name=" + name + ", age=" + age + ", email=" + email + ", homePage="
+ homePage + "]";
}
}
RegisterAction.java
package com.java.action;
import com.java.model.User;
import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
System.out.println("传入的用户:"+user);
return SUCCESS;
}
}
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="manager" extends="struts-default">
<!-- input返回验证信息回到register.jsp -->
<action name="registerAction" class="com.java.action.RegisterAction">
<result name="input">/register.jsp</result>
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
RegisterAction-validation.xml(要写在action的包下面)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name="user.userName">
<field-validator type="requiredstring">
<message>请输入用户名</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>用户名必须在${minLength}和${maxLength}之间</message>
</field-validator>
</field>
<field name="user.name">
<field-validator type="requiredstring">
<message>请输入姓名</message>
</field-validator>
</field>
<field name="user.age">
<field-validator type="int">
<param name="min">18</param>
<message>年龄必须满18周岁</message>
</field-validator>
</field>
<field name="user.email">
<field-validator type="requiredstring">
<message>请输入邮件</message>
</field-validator>
<field-validator type="email">
<message>邮件格式不对</message>
</field-validator>
</field>
<field name="user.homePage">
<field-validator type="requiredstring">
<message>请输入主页</message>
</field-validator>
<field-validator type="url">
<message>主页格式不对</message>
</field-validator>
</field>
<!-- 验证表达式,验证表达式要在Struts.xml的result name="input"的页面加上<s:actionerror/> -->
<validator type="expression">
<param name="expression"><![CDATA[!user.name.equals(user.userName)]]></param>
<message>用户名和真实姓名不能相同</message>
</validator>
</validators>
register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!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>Insert title here</title>
</head>
<body>
<s:actionerror/> <!-- 显示验证表达式的提示-->
<s:form action="registerAction" >
<s:textfield name="user.userName" label="用户名"></s:textfield>
<s:textfield name="user.name" label="真实姓名"></s:textfield>
<s:textfield name="user.age" label="年龄"></s:textfield>
<s:textfield name="user.email" label="邮件"></s:textfield>
<s:textfield name="user.homePage" label="主页"></s:textfield>
<s:submit value="注册"></s:submit>
</s:form>
</body>
</html>
结果:
验证表达式:
二、自定义验证
在下载的struts2的源码包找到这个路径struts-2.3.16.3\src\apps\portlet\src\main\resources
的validators.xml这个xml文件
将他复制到项目的src下面
写自定义验证敏感词方法:
SensitiveWordValidators.java
package com.java.validators;
import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;
public class SensitiveWordValidators extends FieldValidatorSupport{
public void validate(Object object) throws ValidationException {
//调试发现fieldName得到"name"
String fieldName=this.getFieldName();
//获取用户输入的值
String value=this.getFieldValue(fieldName, object).toString();
if(!check(value)){
//返回错误信息给input页面
this.addFieldError(fieldName, object);
}
}
//验证方法
//返回字符中indexof(string)中字串string在父串中首次出现的位置,从0开始!没有返回-1;
public boolean check(String value){
String sensitiveWords[]={"操","傻逼"};
for(int i=0;i<sensitiveWords.length;i++){
if(value.indexOf(sensitiveWords[i])>-1){
return false;
}
}
return true;
}
}
在validators.xml加入刚刚写的验证方法
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator Config 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd">
<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<!-- 自定义的敏感词验证器 -->
<validator name="sensitive" class="com.java.validators.SensitiveWordValidators"/>
</validators>
ValidationAction.java
package com.java.action;
import com.opensymphony.xwork2.ActionSupport;
public class ValidationAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String execute() throws Exception {
System.out.println("姓名:"+name);
return SUCCESS;
}
}
ValidationAction-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name="name">
<field-validator type="requiredstring">
<message>请输入姓名</message>
</field-validator>
<field-validator type="sensitive">
<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="manager" extends="struts-default">
<!-- input返回验证信息回到register.jsp -->
<action name="validationAction" class="com.java.action.ValidationAction">
<result name="input">/validation.jsp</result>
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
视图层
validation.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!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>Insert title here</title>
</head>
<body>
简单自定义验证
<s:form action="/validationAction" method="post">
<s:textfield name="name" label="姓名"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
</body>
</html>
结果: