zoukankan      html  css  js  c++  java
  • Struts2中验证表单数据(使用声明式验证)

    1. 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.ljq.web.action.StudentAction" method="addStudent" >           
                <result name="input">/student.jsp</result>  <!-- 验证失败时,请求参数带回 -->
                <result>/success.jsp</result> <!-- 默认name=“success” -->
            </action>
        </package>
    </struts>

    2. POJO类 (Plain Ordinary Java Object 简单的Java对象,实际就是普通JavaBeans)

    package com.ljq.domain;
    
    import java.io.Serializable;
    /**
     * URL: uniform resource locator 统一资源定位符
     * http://localhost:8080/day25_ee19_05struts2convert/register.jsp
     * 协议             主机                 端口        URI    
     * URI: uniform resource identifier 统一资源标识符
     * /day25_ee19_05struts2convert/register.jsp
     * @author zhy
     *
     */
    public class Student 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;
        }
        
        
    }
    View Code

    3. Action类

    package com.ljq.web.action;
    
    import com.ljq.domain.Student;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    
    public class StudentAction extends ActionSupport implements ModelDriven<Student> {
    
        Student stu = new Student();
    
        @Override
        public Student getModel() {
            return stu;
        }
        
        //动作方法
        public String addStudent(){
            return SUCCESS;
        }
    
        public Student getStu() {
            return stu;
        }
    
        public void setStu(Student stu) {
            this.stu = stu;
        }
    
    }

    4. 验证配置文件 StudentAction-addStudent-validation.xml ,放在Action类所在的包下。写了该配置文件,就要在struts.xml 中配置 <result name="input"> 标签,否则报错(No result defined for action.....and result input

    命名规范:Action类名 -  ActionName(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">
    <!-- 当使用ActionClassName-validation.xml来命名文件时,它是一个动作类验证器。会验证动作类中的所有动作方法,  同样可以使用 @SkipValidate 跳过验证-->
    <!-- 当使用ActionClassName-ActionName-validation.xml来命名文件时,它是一个指定动作方法的验证器。只会验证指定的动作方法 -->
    <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">100</param>
                <message>请输入18-100之间的整数</message>
            </field-validator>
        </field>
        
        <field name="email">
            <field-validator type="email">
                <message>请输入正确的邮箱格式</message>
            </field-validator>
        </field>
        
        <field name="password">
            <field-validator type="requiredstring">
                <!-- 注入取消使用trim -->
                <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>
    
        <!-- 确认密码和密码必须保持一致,是2个字段的事,所以要使用基于验证器的声明方式 -->
        <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">
            <!-- required是一个只验证是否null的内置验证器,不会去除空格 -->
            <field-validator type="required">
                <message>请选择性别</message>
            </field-validator>
        </field>
    </validators>

     5. student.jsp 显示

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%--导入struts2的标签库 --%>
    <%@ taglib uri="/struts-tags" prefix="s" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>用户注册,使用的是struts2的标签</title>
        <s:head></s:head>
      </head>
      <body>
          <s:actionerror/> <%--动作错误 --%>
          <%--<s:fielderror /> 字段错误 --%>
          <%--struts2的form标签,它提供了和原始html表单标签几乎一致的属性
              action:请求的地址。直接写动作名称。不用写contextPaht
              method:请求的方式。在这里不用写。struts2的form表单默认就是post
              enctype:表单编码的MIME类型
          --%>
          <s:form action="addStudent.action">
              <s:textfield name="username" label="用户名" />
              <s:textfield name="age" label="年龄"/>
              <s:textfield name="email" label="邮箱"/>
              <s:textfield name="password" label="密码" />
              <s:textfield name="repassword" label="确认密码"/>
              <s:textfield name="score" label="成绩"/>
              <s:textfield name="url" label="个人主页"/>
              <%--list中的取值是生成一个list集合,并往集合中放入元素 --%>
              <s:radio name="gender" list="{'男','女'}"  label="性别"/>
              <s:submit value="注册"/>
          </s:form>
      </body>
    </html>

    常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。

    昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
  • 相关阅读:
    mysql 用户表结构设计,第三方登录
    linux centOS服务器部署ssh,免密码登陆linux
    linux SSH免密码登录远程服务器
    java反射机制学习笔记
    jvm知识
    类继承相关信息
    拦截器和过滤器的执行顺序和区别
    实现Map按key或按value排序
    喜欢的句子
    sql 性能优化相关--总结别人的总结,未做验证,先归纳
  • 原文地址:https://www.cnblogs.com/htj10/p/13458144.html
Copyright © 2011-2022 走看看