1 服务端 Action验证
1.1 方法1
public class UserAction extends ActionSupport implements ModelDriven<User> {
private User user = new User();
@Override
public User getModel() {
return user;
}
/*
* struts2自带的表单验证
* 第一种:重写 validate 方法,表单必须是 struts 的
* 如果数据错误,向 FieldError 添加字段错误信息
* addFieldError 里的 key 是表单的 name 的值
* validate 对于 Action 来说是全局,也就是 action 的所有方法都会生效
* */
@Override
public void validate() {
if(StringUtils.isEmpty(user.getUsername())){
addFieldError("username","用户名不能为空");
}
if(StringUtils.isEmpty(user.getPassword())){
addFieldError("password","密码不能为空");
}
}
public String register(){
/*
* struts2在使用模型驱动注入参数时,会自动类型转换
* servlet 接收到表单的参数都是字符串类型
* struts会把String 转为Date,boolean
*
* */
System.out.println(user);
/*IUserService us = new UserServiceImpl();
us.register(user);
*/
return NONE;
}
}
1.2 方法2
public class UserAction extends ActionSupport implements ModelDriven<User> {
private User user = new User();
@Override
public User getModel() {
return user;
}
/**
* struts2自带的表单验证
* 第一种:写一个方法,格式: validate + 方法名(第一个字母大写)
* 只针对方法有效,它是局部的字段校验
* */
public void validateRegister() {
if(StringUtils.isEmpty(user.getUsername())){
addFieldError("username","用户名不能为空");
}
if(StringUtils.isEmpty(user.getPassword())){
addFieldError("password","密码不能为空");
}
}
public String register(){
System.out.println(user);
return NONE;
}
}
1.3 方法3
- 在不需要验证的方法上加上注解
public class UserAction extends ActionSupport implements ModelDriven<User> {
private User user = new User();
@Override
public User getModel() {
return user;
}
@Override
public void validate() {
if(StringUtils.isEmpty(user.getUsername())){
addFieldError("username","用户名不能为空");
}
if(StringUtils.isEmpty(user.getPassword())){
addFieldError("password","密码不能为空");
}
}
public String register(){
System.out.println(user);
return NONE;
}
// 第三种方法
@SkipValidation
public String list(){
return "list";
}
}
2 XML 声明式验证
2.1 全局声明方式
- 在action包中声明
UserAction-validation.xml
文件 - 这种方式配置是全局配置,所有action的方法都会拦截验证
- 如果其它方法不想验证,可配置
@SkipValidation
注解 - dtd约束可以在xwork-core的jar包中找
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<!--第一种校验方式:field-->
<field name="username">
<field-validator type="requiredstring">
<param name="fieldName">username</param>
<message>用户名不能为空-xml</message>
</field-validator>
</field>
<!--第二种校验方式-->
<validator type="requiredstring">
<param name="fieldName">password</param>
<message>密码不能为空-xml</message>
</validator>
</validators>
public class UserAction extends ActionSupport implements ModelDriven<User> {
private User user = new User();
@Override
public User getModel() {
return user;
}
public String register(){
System.out.println(user);
return NONE;
}
// 第三种方法
@SkipValidation
public String list(){
return "list";
}
}
2.2 局部声明方式
- 在action包中声明UserAction-register-validation.xml文件
声明方式Action类名-方法名-validation.xml
- xml内容与上面的一样
3 验证器案例
- 模型
public class Student {
private String username;// 不能为空,去空字符串
private int age; // 18~100
private String email;
private String password; // 3~8
private String repassword;
private int score;//必须是自然数
private String url;// 必须是一个路径 http://
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;
}
@Override
public String toString() {
return "Student{" +
"username='" + username + '\'' +
", age=" + age +
", email='" + email + '\'' +
", password='" + password + '\'' +
", repassword='" + repassword + '\'' +
", score=" + score +
", url='" + url + '\'' +
", gender='" + gender + '\'' +
'}';
}
}
-add.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<title>注册用户</title>
<%--设置回显信息为红色--%>
<s:head></s:head>
</head>
<body>
<s:debug></s:debug>
<s:actionerror></s:actionerror>
添加学生
<s:form action="/stu/add.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 list="{'男','女'}" name="gender" label="性别"></s:radio>
<s:submit value="添加"></s:submit>
</s:form>
</body>
</html>
- Action
public class StudentAction extends ActionSupport implements ModelDriven<Student> {
private Student stu = new Student();
@Override
public Student getModel() {
return stu;
}
public String add(){
System.out.println(stu);
return NONE;
}
}
- 验证器
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<!--requiredstring 比 required 好些,会自动去除空格-->
<validator type="requiredstring">
<param name="fieldName">username</param>
<message>用户名不能为空</message>
</validator>
<validator type="int">
<param name="fieldName">age</param>
<param name="min">18</param>
<param name="max">100</param>
<message>年龄在18~100</message>
</validator>
<validator type="email">
<param name="fieldName">email</param>
<message>邮箱格式不正确</message>
</validator>
<validator type="requiredstring">
<param name="fieldName">password</param>
<message>密码不能为空</message>
</validator>
<validator type="stringlength">
<param name="fieldName">password</param>
<param name="minLength">3</param>
<param name="maxLength">8</param>
<message>密码长度3~8</message>
</validator>
<validator type="expression">
<param name="expression">
<![CDATA[ password == repassword]]>
</param>
<message>密码不一致</message>
</validator>
<!--score 必须是自然数-->
<!--<validator type="regex">
<param name="fieldName">score</param>
<param name="regexExpression">\d+</param>
<message>分数必须是数字</message>
</validator>-->
<validator type="url">
<param name="fieldName">url</param>
<message>url格式错误,以 http:// 开头</message>
</validator>
<validator type="required">
<param name="fieldName">gender</param>
<message>性别必填</message>
</validator>
</validators>