新建 Struts2 项目
new project —> Java Enterprise —> Struts2
新建好的项目目录如下:
这个jar包可以到我的GitHub上下载。
Struts2 校验器使用流程
- 在 src 下编写 action 类的代码,实现所要校验的属性的 get/set 方法
- src 下的 struts.xml 配置 action 类
- 在 web 下编写 jsp
- 在 action 类的同级目录下新建以
action类名-validation.xml
为名的校验器配置文件并配置校验器
一. 在 src 目录下新建 action 包和 bean 包,action 包用于编写 action 类处理 jsp 表单和校验器的请求,一般要继承 ActionSupport
类,并重写execute()
方法。bean 包主要是 Pojo(简单的 Java 对象)类,封装各个属性的 get/set 方法。
- bean 包中的 User.java 如下:
import java.util.Date;
public class User {
String ID;
String name;
String sex;
Date birth;
String major;
String grade;
String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
}
- action 包中的 ValidateAction.java 如下:
import com.opensymphony.xwork2.ActionSupport;
import org.easybooks.test.bean.User;
public class ValidateAction extends ActionSupport {
private User stu;
public User getStu() {
return stu;
}
public void setStu(User stu) {
this.stu = stu;
}
@Override
public String execute() throws Exception {
return "success";
}
}
二、src 下的 struts.xml 配置如下:
如果 jsp 文件是在 web 的子目录下,则需要设置好相对路径
<?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>
<package name="default" extends="struts-default">
<action name="validate" class="org.easybooks.test.action.ValidateAction">
<!-- 校验成功 -->
<result name="success">/structs2_week5/success.jsp</result>
<!-- 校验失败后 -->
<result name="input">/structs2_week5/validate.jsp</result>
</action>
</package>
</struts>
三、在 web 下编写 jsp
- validate.jsp :
<%@ taglib prefix="s" uri="/struts-tags" %>
<%--
Created by IntelliJ IDEA.
User: admin
Date: 2019/4/26
Time: 10:38
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册校验器</title>
</head>
<body>
<div align="center">
<!-- action 要填写在 struts.xml 中配置的 action-name -->
<form action="validate.action" method="post">
<table>
<caption>注册校验器</caption>
<tr>
<td>学号:</td>
<td><input type="text" name="stu.ID"/> </td>
<td>
<!-- 使用 <S: fielderror fieldName="stu.ID"/> 输入相应的字段错误信息 -->
<h3 style="color:red"> <s:fielderror fieldName="stu.ID"/> </h3>
</td>
</tr>
<tr>
<td>姓名:</td>
<td>
<input type="text" name="stu.name"/>
</td>
<td>
<s:fielderror fieldName="stu.name"/>
</td>
</tr>
<tr>
<td>性别:</td>
<td>
<input type="radio" name="stu.sex">男
<input type="radio" name="stu.sex">女
</td>
<td>
<s:fielderror fieldName="stu.sex"/>
</td>
</tr>
<tr>
<td>出生年月日</td>
<td>
<input type="date" name="stu.birth">
</td>
<td>
<s:fielderror fieldName="stu.birth"/>
</td>
</tr>
<tr>
<td>邮箱:</td>
<td>
<input type="text" name="stu.email"/>
</td>
<td>
<s:fielderror fieldName="stu.email"/>
</td>
</tr>
<tr>
<td>专业:</td>
<td>
<input type="text" name="stu.major">
</td>
<td>
<s:fielderror fieldName="stu.major"/>
</td>
</tr>
<tr>
<td>总分:</td>
<td>
<input type="text" name="stu.grade"/>
</td>
<td>
<s:fielderror fieldName="stu.grade"/>
</td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="提交">
</td>
<td></td>
</tr>
</table>
</form>
</div>
</body>
</html>
- success.jsp:
<%@ page isELIgnored="false" %>
<%--
Created by IntelliJ IDEA.
User: admin
Date: 2019/4/25
Time: 21:28
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!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> ${sessionScope.stu.name}
</body>
</html>
四、action 同级目录下新建以action类名-validation.xml
为名的校验器配置文件
- ValidateAction-validation.xml 如下:
头部的
<!DOCTYPE validators ....>
可以在 lib 目录下的struts2-core.jar
包下的xwork-validator-1.0.2.dtd
中复制粘贴。
<?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="stu.ID">
<field-validator type="requiredstring">
<message>学号必须填!</message>
</field-validator>
<!--
<field-validator type="regex">
<param name="regexExpression"> <![CDATA[([A-Z]\w*)]]></param>
<message>学号第一位为大写字母,后面每一位为字母、数字、下划线</message>
</field-validator>
-->
<field-validator type="regex">
<param name="regexExpression"> <![CDATA[([1-9][6-9]\d{6})]]> </param>
<message>学号前两位大于"15"并且后 6 位必须为数字!</message>
</field-validator>
</field>
<!-- 需要校验的字段名-->
<field name="stu.name">
<!-- type值为校验器名,非空字符串校验器,即必填 -->
<field-validator type="requiredstring">
<!-- 去空格 -->
<param name="trim">true</param>
<!-- 错误提示信息 -->
<message>姓名必须填!</message>
</field-validator>
</field>
<field name="stu.major">
<field-validator type="requiredstring">
<message>专业信息必须填!</message>
</field-validator>
</field>
<field name="stu.birth">
<field-validator type="date">
<param name="min">1995-01-01</param>
<param name="max">2001-04-25</param>
<message>生日必须在1995-01-01 至 2001-04-25 之间</message>
</field-validator>
</field>
<field name="stu.grade">
<field-validator type="requiredstring">
<message>成绩必须填!</message>
</field-validator>
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[(stu.grade >= 0 && stu.grade <= 80)]]></param>
<message>成绩在 0 - 80 之间</message>
</field-validator>
</field>
<field name="stu.email">
<!-- 非空校验器 -->
<field-validator type="requiredstring">
<message>邮箱不能为空!</message>
</field-validator>
<!-- 一个字段可以配置多个校验器 -->
<field-validator type="email">
<message>邮箱格式不正确!</message>
</field-validator>
</field>
</validators>
直接运行 validate.jsp 文件,直接点击提交会弹出提示:
填写不符合校验器中的正则表达式则会弹出提示:
有时候没有在代码上出错,比如 jsp 或者 Javaclass文件找不着:ClassnotfoundException 这种,那就直接新建个 jsp 文件把源码复制进去再运行吧。一般耐心一点翻看 Tomcat 的 server-log 的错误提示,可能是 jar 包的问题,可能是空指针(NPE)的问题。但无论怎么样,至少排除掉源码上的错误。