运用Struts2数据验证实现注册表单验证
如果要实现这个功能首先要有一个注册的页面
stu.jsp
<%@ 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">
<html>
<head>
</head>
<s:head></s:head>
<s:actionerror/>
<body>
<s:form action="addStudent.action">
<s:textfield name="username" label="用户名"></s:textfield>
<s:textfield name="age" label="年龄"></s:textfield>
<s:textfield name="email" label="邮箱"></s:textfield>
<s:textfield name="password" label="密码"></s:textfield>
<s:textfield name="repassword" label="确认密码"></s:textfield>
<s:textfield name="score" label="成绩"></s:textfield>
<s:textfield name="url" label="主页"></s:textfield>
<s:radio name="gender" list="{'男','女'}" label="性别"></s:radio>
<s:submit value="提交"></s:submit>
</s:form>
</body>
</html>
下面写一下对应的实体类
Student.java
package com.qianfeng.domain;
public class Student {
private String username;//不能为null或空字符串
private int age;//18--100
private String email;//符合邮箱格式
private String password;//长度3--8
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;}
}
写完实体类我们就可以配置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="p1" extends="struts-default">
<action name="addStudent" class="com.qianfeng.web.action.StudentAction" method="addStudent">
<result name="input">/stu.jsp</result>
</action>
</package>
</struts>
然后写对应的动作类StudentAction.java和动作方法addStudent()
package com.qianfeng.web.action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.qianfeng.domain.Student;
public class StudentAction extends ActionSupport implements ModelDriven<Student>{
private Student student = new Student();
public String addStudent()
{
return SUCCESS;
}
@Override
public Student getModel() {
return student;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}
接下来,就是真正的数据验证的部分了,我们是用上一篇中所说的声明式验证:写xml文件验证
文件名要是StudentAction-addStudent-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>
<field name="age">
<field-validator type="int">
<param name="min">18</param>
<param name="max">70</param>
<message>年齡必須在18到70之間</message>
</field-validator>
</field>
<field name="email">
<field-validator type="email">
<message>邮箱格式不正确</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<param name="trim">false</param>
<message>密码不能为空</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">3</param>
<param name="maxLength">8</param>
<message>密码长度必须在3--8位之间</message>
</field-validator>
</field>
<!-- 确认密码需要和密码一致,所以使用验证器验证 -->
<validator type="expression">
<param name="expression">
<![CDATA[
password==repassword
]]>
</param>
<message>确认密码要和密码一致</message>
</validator>
<field name="score">
<field-validator type="regex">
<param name="regex">
\d+
</param>
<message>成绩必须是正整数</message>
</field-validator>
</field>
<field name="url">
<field-validator type="url">
<message>输入正确的url地址</message>
</field-validator>
</field>
<field name="gender">
<field-validator type="required">
<message>请选择性别</message>
</field-validator>
</field>
</validators>
根据field-validator的type属性来决定使用什么方式的验证
type的取值可以在xwork核心jar包xwork-core-2.3.15.3.jar中的com/opensymphony/xwork2/validator/validators/default.xml中找到