您的位置:首页 > 编程语言 > Java开发

Struts2基于配置校验的内置类型及使用实例

2017-08-25 16:23 489 查看
好记性不如不如赖笔头…………

Struts2内置的校验配置文件内容如下 :

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE validators SYSTEM "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd" PUBLIC "-//Apache Struts//XWork Validator Definition 1.0//EN">

<!-- START SNIPPET: validators-default -->

-<validators>

<!-- END SNIPPET: validators-default -->

<validator class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator" name="required"/>

<validator class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator" name="requiredstring"/>

<validator class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator" name="int"/>

<validator class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator" name="long"/>

<validator class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator" name="short"/>

<validator class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator" name="double"/>

<validator class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator" name="date"/>

<validator class="com.opensymphony.xwork2.validator.validators.ExpressionValidator" name="expression"/>

<validator class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator" name="fieldexpression"/>

<validator class="com.opensymphony.xwork2.validator.validators.EmailValidator" name="email"/>

<validator class="com.opensymphony.xwork2.validator.validators.URLValidator" name="url"/>

<validator class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator" name="visitor"/>

<validator class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator" name="conversion"/>

<validator class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator" name="stringlength"/>

<validator class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator" name="regex"/>

<validator class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator" name="conditionalvisitor"/>

</validators>


下面是创建的一个测试范例,步骤如下:

1、创建Student实体类

package com.ckinghan.bean;

import java.io.Serializable;

public class Student implements Serializable{

private String userName;    //不能为空
private int age;                    //整数,介于1-180之间
private String email;           //按格式输入
private String password;    //密码长度8-18位
private String repassword;  //确认密码:必须 和密码一致。注意模型中无需保存确认密码,只是为了演示
private int score;                  //成绩:必须是数字
private String url;             //个人主页:必须符合URL格式
private String gender;          //性别

public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRepassword() {
return repassword;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}

}


2、创建studentInfo.jsp文件

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags"  prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>信息提交</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>
<s:head></s:head>
<body>
<s:form action="getStudentInfo.action">
<s:textfield label="学生姓名" name="userName"></s:textfield>
<s:textfield label="学生年龄" name="age"></s:textfield>
<s:textfield label="常用邮箱" name="email"></s:textfield>
<s:textfield label="设置密码" name="password"></s:textfield>
<%-- 如果没有这个,密码不一致的错误信息不会显示 --%>
<s:actionerror/>
<s:textfield label="确认密码" name="repassword"></s:textfield>
<s:textfield label="个人成绩" name="score"></s:textfield>
<s:textfield label="个人主页" name="url"></s:textfield>
<s:radio list="{'男','女'}" name="gender" label="学生性别"></s:radio>
<s:submit value="提交"></s:submit>

</s:form>
</body>
</html>


3、创建StudentController文件

package com.ckinghan.web.action;

import com.ckinghan.bean.Student;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class StudentController extends ActionSupport implements ModelDriven<Student> {

private Student student = new Student();

public Student getStudent() {
return student;
}

public void setStudent(Student student) {
this.student = student;
}

@Override
public Student getModel() {
return student;
}

@Override
public String execute() throws Exception {
return SUCCESS;
}

}


4、创建基于配置的校验配置文件,配置文件与StudentController文件处于同一目录下,配置文件的命名规则为:动作类名-validation.xml,在本测试中,配置文件名为:StudentController-validation.xml

<?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="userName">
<field-validator type="requiredstring">
<message>用户名不能为空</message>
</field-validator>
</field>

<!--年龄范围:1-180之间 -->
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">180</param>
<message>介于1-180之间的整数</message>
</field-validator>
</field>

<!-- 邮箱格式验证 -->
<field name="email">
<field-validator type="email">
<message>邮箱格式不正确</message>
</field-validator>
</field>

<!-- 密码为8-18位的字符 -->
<field name="password">
<field-validator type="stringlength">
<param name="maxLength">18</param>
<param name="minLength">8</param>
<message>密码长度8-18位</message>
</field-validator>
</field>

<!-- 注意:这个与其它的校验不同,它在前端JSP页面的提示要加<s:actionerror/>才会显示,因为它不是基于字段的校验 -->
<validator type="expression">
<!-- 表达式要注入的表达式内容 -->
<param name="expression">
<![CDATA[password ==  repassword]]>
</param>
<!-- 要校验的input 属性名称-->
<param name="repassword"></param>
<message>两次输入密码不一致</message>
</validator>

<!-- 因为是测试的,成绩就随意定为了数字类型 -->
<field name="score">
<field-validator type="regex">
<param name="regex"><![CDATA[\d+]]></param>
<message>成绩必须为数字</message>
</field-validator>
</field>

<!-- 校验URL的格式  -->
<field name="url">
<field-validator type="url">
<message>请填写正确的URL</message>
</field-validator>
</field>

<!-- 性别不能为空 -->
<field name="gender">
<field-validator type="requiredstring">
<message>请选择性别</message>
</field-validator>
</field>
</validators>


5、配置Struts.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

<constant name="struts-devMode" value="true"></constant>
<package name="userController" extends="struts-default">
<action name="getStudentInfo" class="com.ckinghan.web.action.StudentController">
<result name="input">/studentInfo.jsp</result>
<result >/studentSuccess.jsp</result>
</action>
</package>

</struts>


6、添加studentSuccess.jsp文件

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>学生信息提交成功</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">

</head>

<body>
学生信息提交成功 <br>
</body>
</html>


启动项目,测试效果如下:



备注:很多校验类型的参数如果不知道是什么,可以根据配置文件中的class名称查看源码,找到相对应的参数名,再注入即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐