struts2学习笔记之十五(输入校验)

输入校验

输入校验和类型转换相辅相成

  提交String请求参数,首先是类型转换,再次验证数据的合理性,然后进一步处理

分为客户端校验和服务器校验

  客户端:js代码

  服务器校验:java代码

  客户端校验不能阻止恶意行为,决不能代替服务器校验

  客户端也必不可少,由于大部分的浏览行为是正常行为,这样可以降低服务器的负担

  两者必不可少。

struts2的输入校验完全是模块化的方式

  需要检验哪个Action

  1、继承ActionSupport类

  2、为该Action增加校验规则文件 —-struts2会自动加载该检验规则文件

  3、校验规则文件的文件名应该是actionname-validation.xml(可以拷贝strtus2文件夹里的blank项目里的模板)

  每个校验器对应一条校验规则

  校验失败,会自动跳转到input的result,因此需要配置一个input的result

  

常用内置校验器(10个)

  • required validator
  • requiredstring validator

    fieldname

    trim

  • double validator

    fieldName

    minInclusive 最小值且包含最小值

    maxInclusive

    minExclusive 最小值但不包括最小值

    maxExclusive

  • int validator

    fieldName

    min

    max

  • stringlength validator

    fieldName

    maxLength

    minLength

  • expression validator

    可用于校验前后两次的输入密码是否相同

    expression - the ONGL expression to be evaluated against the stack(Must evaluate to a Boolean)

  • regex validator

    url,email校验器可以使用正则校验器代替

  • date validator

    格式要求太苛刻,不是很好

    需要使用date的short格式

  • email validator
  • url validator

实例

需求:注册用户,使用内置校验器验证输入数据

1、jsp注册页面

    <s:form action="RegisterAction">
        <s:textfield name="user.name" label="用户名"/>
        <s:textfield name="user.pass" label="密码"/>
        <s:textfield name="user.weight" label="体重"/>
        <s:textfield name="user.birth" label="生日"/>
        <s:submit value="注册"/>
    </s:form>

2、RegisterAction类

package org.struts2.action;

import com.opensymphony.xwork2.ActionSupport;

public class Registe extends ActionSupport {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
    public String execute(){
        //UserService业务类,内存仿真数据库
        UserService us = new UserService();
        int status = us.addUser(user);
        if(status == -1){
            return ERROR;
        }
        return SUCCESS;
    }
}

3、为action制作规则文件

注意:

  • 文件名必须为actionname-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="user.name">
        <field-validator type="requiredstring" short-circuit="true">
            <param name="trim">true</param>
            <message>姓名不能为空</message>
        </field-validator>
    </field>
    <field name="user.pass">
        <field-validator type="requiredstring" short-circuit="true">
            <param name="trim">true</param>
            <message>密码不能为空</message>
        </field-validator>
    </field>
    <field name="user.weight">
        <field-validator type="double" short-circuit="true">
            <param name="minInclusive">10.0</param>
            <param name="maxInclusive">90.0</param>
            <message>体重在10.0~90.0之间</message>
        </field-validator>
    </field>
    <field name="user.birth">
        <field-validator type="required" short-circuit="true">
            <message>生日不能为空</message>
        </field-validator>
        <field-validator type="date" short-circuit="true">
            <message>生日格式是short形式</message>
        </field-validator>
    </field>
</validators>

4、配置input逻辑视图(struts.xml)

<package name="action" extends="struts-default">
        <action name="RegisterAction" class="org.struts2.action.Registe">

            <result name="input">/WEB-INF/content/register.jsp</result>
            <result type="chain">listUsers</result>
        </action>
        <action name="listUsers" class="org.struts2.action.usersListAction">
            <result>/WEB-INF/content/usersList.jsp</result>
        </action>
    </package>
时间: 2024-10-10 08:47:48

struts2学习笔记之十五(输入校验)的相关文章

Android学习笔记(十五)——碎片的生命周期(附源码)

碎片的生命周期 点击下载源码 与活动类似,碎片具有自己的生命周期.理解了碎片的生命周期后,我们可以在碎片被销毁时正确地保存其实例,在碎片被重建时将其还原到前一个状态. 1.使用上一篇的项目Fragments,在Fragment1.java文件中添加如下代码: package net.zenail.Fragments; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.Fragm

VSTO学习笔记(十五)Office 2013 初体验

原文:VSTO学习笔记(十五)Office 2013 初体验 Office 2013 近期发布了首个面向消费者的预览版本,我也于第一时间进行了更新试用.从此开始VSTO系列全面转向Office 2013平台,即VSTO 5.0. 本系列所有测试代码均在Visual Studio 2012 Ultimate RC + Office 2013 Professional Plus x64 Preview 上测试通过 为了配合Windows 8,微软的很多软件风格都逐渐Metro化,Office作为拳头

马哥学习笔记二十五——ISCSI协议,架构及其安装配置

ISCSI监听在tcp/3260端口 iSCSI Target:iscsi-target-utils 客户端认正方式: 1.基于IP 2.基于用户,CHAP tgtadm:命令行工具,模式化命令 --mode 常用模式:target,logicalunit,account target --op new.delete.show.update.bind.unbind logicalunit --op new.delete account --op new.delete.bind.unbind --

Android学习笔记二十五之ListView多布局实现

Android学习笔记二十五之ListView多布局实现 这一节是介绍ListView这个控件的最后一节,实现一个Item的多布局.像我们经常在用的各种即时通讯工具,QQ.微信等,假设他们的会话界面是ListView实现的,那么ListView就有多种Item布局,这一节,我们就来实现一个ListView的多种Item. 要实现ListView里面有多种Item,就要重写适配器的两个方法getViewTypeCount()和getItemViewType(int position),第一个方法是

【Unity 3D】学习笔记四十五:游戏实例——击垮围墙

用这个游戏实例来总结之前我们复习的所有关于物理引擎的知识.在游戏中,发送一个球形的炮弹来击垮前面的墙.给炮弹与墙都添加了刚体组件,给炮弹绑定了粒子系统,并且在炮弹的粒子动画中添加了5组不同的颜色,显示移动轨迹. using UnityEngine; using System.Collections; public class Script_06_14 : MonoBehaviour { //炮弹对象 private GameObject obj; //准心贴图 public Texture te

angular学习笔记(二十五)-$http(3)-转换请求和响应格式

本篇主要讲解$http(config)的config中的tranformRequest项和transformResponse项 1. transformRequest: $http({ transformRequest: function(data){ //对前台发送的data进行处理 return data } }) 这个在测试的时候遇到了很大的问题.只要经过transformRequest函数处理,哪怕是不做任何处理,node后台都会报错,需要尝试使用php 2. transformResp

struts2学习笔记之十八(国际化)

java国际化 程序国际化: 程序可以根据机器所在国家.语言环境,自动翻译内容 国际化的本质就是:查找.替换,从资源包里找到相应国家下的关键字对应的语言文字 国际化的步骤: (1)提供国际化资源文件 如果国家化资源包中有非西欧字符,需要使用native2ascii处理文件, native2ascii sourcefile destfile 生成一个是Unicode字符的文件 资源文件的写法:文件名语言代码国家代码 xiyang_en_US.properties hi="hello" x

JavaScript学习笔记(十五)——对象之Date,RegExp

在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/学习. Date 在JavaScript中,Date对象用来表示日期和时间. 系统当前时间: var now = new Date(); now; // Thu Nov 30 2017 20:50:03 GMT+0800 (中国标准时间) now.getFullYear(); // 2017, 年份

【Unity 3D】学习笔记三十五:游戏实例——摄像机切换镜头

摄像机切换镜头 在游戏中常常会切换摄像机来观察某一个游戏对象,能够说.在3D游戏开发中,摄像头的切换是不可或缺的. 这次我们学习总结下摄像机怎么切换镜头. 代码: private var Camera0: GameObject; private var Camera1: GameObject; private var Camera2: GameObject; private var Camera: GameObject; function Start() { //获取摄像机对象 Camera =