运用Struts2验证器实现注册表单验证

具体验证要求:

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;//性别
 

我创建的工程目录如下:

扫描二维码关注公众号,回复: 8820221 查看本文章

首先新建一个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>

发布了26 篇原创文章 · 获赞 18 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41056197/article/details/85257157
今日推荐