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

好记性不如不如赖笔头…………

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名称查看源码,找到相对应的参数名,再注入即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值