Struts2--验证框架
Struts2的验证通过配置xml或者注解的方式。依赖与validationheworkflow接口(被默认的拦截器桟引入)。validation接口执行验证并且创建一些列的错误域。workflow接口检查验证错误的状态,一旦发现,就默认返回"input",
先看一个简单的验证实例:
View Code
View Code
View Code
View Code
View Code执行结果:

从系统自带的验证器配置文件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="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<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="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
自定义验证
在struts2中要想实现验证,可以实现通过实现以下几个接口的方式来实现
- com.opensymphony.xwork2.validator.validators.ValidatorSupport
- com.opensymphony.xwork2.validator.validators.FieldValidatorSupport
- com.opensymphony.xwork2.validator.validators.RangeValidatorSupport
- com.opensymphony.xwork2.validator.validators.RepopulateConversionErrorFieldValidatorSupport
实例:
package com.fuwh.model;
public class Student {
//首先编写一个学生实体类
private String name;
private int age;
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;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page import="java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>表单界面</title>
</head>
<body>
<p>然后编写一个前台注册页面</p>
<s:fielderror></s:fielderror>
<s:form method="post" action="validationAction">
<s:textfield name="stu.name" label="名字"/>
<s:textfield name="stu.age" label="年龄"/>
<s:submit value="注册"></s:submit>
</s:form>
</body>
</html>
package com.fuwh.model;
import com.opensymphony.xwork2.ActionSupport;
public class ValidationAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private Student stu;
public Student getStu() {
return stu;
}
public void setStu(Student stu) {
this.stu = stu;
}
//这是action的默认入口方法
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("execute the default method!!!-->>"+stu);
return SUCCESS;
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 开启debug模式,会自动加载配置文件等等,不用每次更改了配置文件就去重新启动下服务器 -->
<constant name="struts.devMode" value="true" />
<!-- 配置action -->
<package name="validation" extends="struts-default">
<action name="validationAction" class="com.fuwh.model.ValidationAction">
<result name="success">success.jsp</result>
<!-- 必须要有input -->
<result name="input">index.jsp</result>
</action>
</package>
</struts>
package com.fuwh.model;
import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;
public class MyValidator extends FieldValidatorSupport{
@Override
public void validate(Object object) throws ValidationException {
// TODO Auto-generated method stub
String fieldName=this.getFieldName(); //取得字段名
String fieldValue=this.getFieldValue(fieldName, object).toString(); //取得字段值
if(fieldValue.indexOf("日")!=-1){
//添加错误信息
this.addFieldError(fieldName, object);
}
}
}
<?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="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<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="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
<!--
将默认的validators.xml文件添加到classpath,然后在里面添加自己的验证器MyValidator
name:就是自己的验证器的名字,以后在action名-validation.xml文件中配置验证的时候需要使用
-->
<validator name="myvalidator" class="com.fuwh.model.MyValidator"/>
</validators>
<?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">
<!-- 配置验证器,文件和action类放在一个地方,命名为action的类名+"-validaiont.xml" -->
<validators>
<field name="stu.name">
<!--
对名字字段,
同时使用系统自带的requiredstring来验证熊为空
和自定义的验证,来验证不能包含敏感词汇
-->
<field-validator type="requiredstring">
<message>年龄不能为空</message>
</field-validator>
<field-validator type="myvalidator">
<message>姓名不能包含敏感词汇</message>
</field-validator>
</field>
<field name="stu.age">
<field-validator type="int">
<param name="min">12</param>
<param name="max">18</param>
<message>年龄只能在12到18岁之间</message>
</field-validator>
</field>
</validators>



浙公网安备 33010602011771号