具体验证要求:
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;//性别
我创建的工程目录如下:
首先新建一个JSP页面
success.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html>
<html>
<head>
<s:head></s:head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<%-- <s:fielderror></s:fielderror> --%>
<s:form action="hello">
<s:textfield name="username" label="姓名" required="true" requiredposition="left"></s:textfield>
<s:textfield name="age" label="年龄"></s:textfield>
<s:textfield name="email" label="邮箱"></s:textfield>
<s:password name="password" label="密码"> </s:password>
<s:password name="repassword" label="确认密码"> </s:password>
<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>
创建对应的实体类
User.java
package com.model;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
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.configuration.xml.reload" value="true"></constant>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="p1" extends="struts-default">
<action name="hello" class="com.contrller.UserAction" method="addStudent">
<!-- input 跟随的 jsp 从哪里来到哪里去 -->
<result name="input">/success.jsp</result>
</action>
</package>
</struts>
写对应的动作类UserAction.java和动作方法addStudent()
UserAction.java
package com.contrller;
import java.sql.DriverManager;
import org.apache.commons.lang3.StringUtils;
import org.apache.struts2.interceptor.validation.SkipValidation;
import com.model.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class UserAction extends ActionSupport implements ModelDriven<User>{
private User user = new User();
public User getUser(){
return user;
}
public void setUser(User user){
this.user = user;
}
@Override public User getModel(){
// TODO Auto-generated method stub
return user;
}
public String addStudent() {
return "success";
}
写xml文件验证(声明式验证中的局部验证):该文件一定要放在动作类所在包中!!且命名要符合命名规则!!!
UserAction-hello-validation.xml(命名规则:动作类名+struts.xml中action的name值+“-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根元素 -->
<validators>
<!--field:指定action中要校验的属性;name:指定将被验证的表单字段的名字 -->
<field name="userName">
<!--field-validator:指定验证规则;type:指定验证规则的名称 -->
<!-- requiredstring:非空字符串验证器 -->
<field-validator type="requiredstring">
<!--message:验证失败时,提示的错误信息里面的文本:错误提示信息 -->
<message>姓名不能为空</message>
</field-validator>
</field>
<field name="age">
<!-- int:整型验证器 -->
<field-validator type="int">
<!--param:向验证器传递的参数,name值为校验器的参数名 -->
<!-- 使用注入的方式,设置最大和最小值 -->
<param name="min">18</param>
<param name="max">100</param>
<message>请输入18-100之间的整数</message>
</field-validator>
</field>
<field name="email">
<!-- email:email 验证器 -->
<field-validator type="email">
<message>请输入正确的邮箱</message>
</field-validator>
</field>
<field name="password">
<!-- requiredstring:非空字符串验证器 -->
<field-validator type="requiredstring">
<param name="trim">false</param>
<message>密码不能为空</message>
</field-validator>
<!-- stringlength:字符串长度验证器 -->
<field-validator type="stringlength">
<param name="minLength">3</param>
<param name="maxLength">8</param>
<message>请输入长度为3~8位的密码</message>
</field-validator>
</field>
<field name="repassword">
<!-- fieldexpression:字段表达式验证器 -->
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[password==repassword]]></param>
<message>确认密码要和密码一致!</message>
</field-validator>
</field>
<field name="score">
<!-- int:整型验证器 -->
<field-validator type="int">
<!--param:向验证器传递的参数,name值为校验器的参数名 -->
<!-- 使用注入的方式,设置最大和最小值 -->
<param name="min">0</param>
<param name="max">100</param>
<message>请输入0-100之间的整数</message>
</field-validator>
</field>
<field name="url">
<!-- url:url格式验证器 -->
<field-validator type="url">
<message>请输入正确的url地址</message>
</field-validator>
</field>
<field name="gender">
<!-- required:非空验证器 -->
<field-validator type="required">
<message>请选择性别</message>
</field-validator>
</field>
</validators>