Struts2表单数据校验

  前台校验

  也称之为客户端校验,主要是通过JavaScript编程的方式进行表单数据的验证。

  后台校验

  也称之为服务器端校验,这里指的是使用Struts2通过XML配置的方式进行表单数据的验证。

 Struts2表单数据校验

1. Action继承ActionSupport(提供和表单同名的属性以及get和set)

public class UserAction extends ActionSupport {private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}
}

  2. 重写validate方法

3. 使用this.addFieldError(“username”, “用户名不能为空!”);添加校验信息

package com.hyxd.action;import com.hyxd.entity.User;
import com.hyxd.service.IUserService;
import com.hyxd.service.impl.UserServiceImpl;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}private IUserService service = new UserServiceImpl();@Overridepublic void validate() {if(user.getUserName()==null || "".equals(user.getUserName())){super.addFieldError("userName", "用户名不能为空");}if(user.getPassword()==null || "".equals(user.getPassword())){super.addFieldError("password", "密码不能为空");}}public String login(){try {User userInfo = service.login(user);if(userInfo==null){return INPUT;}ActionContext.getContext().getSession().put("userInfo", userInfo);return "login";} catch (Exception e) {return ERROR;}}}

  4. 使用显示指定校验信息

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>登录</title>
<style type="text/css">
<!--
.STYLE1 {font-family: "微软雅黑";font-size: 18px;
}
.STYLE4 {font-family: "微软雅黑"; font-size: 14px; }
-->
</style>
</head>
<body>
<form name="formUserAction" method="post" action="${pageContext.request.contextPath }/user_login"><table width="301" height="144" border="1" align="center"><tr><td colspan="3" align="center" valign="middle"><span class="STYLE1">登 录</span></td></tr><tr><td width="149" align="left" valign="middle"><span class="STYLE4">用户名:</span></td><td width="231" colspan="2" align="left" valign="middle"><label><input type="text" name="user.userName" /></label></td></tr><tr><td align="left" valign="middle"><span class="STYLE4">密码:</span></td><td colspan="2" align="left" valign="middle"><label><input type="text" name="user.password" /></label></td></tr><tr><td colspan="3" align="right" valign="middle"><label><input type="submit" name="Submit" value="提交" /></label></td></tr><!-- 显示错误信息 --><s:fielderror fieldName="userName"></s:fielderror><s:fielderror fieldName="password"></s:fielderror></table>
</form>
</body>
</html>

  默认validate()校验Action中的所有方法,如果用户要单击注册超链接访问注册页面的时候该方法就会执行校验无法跳转。所以需要重写validateXxx(),如果只是需要校验login方法那么就是validateLogin()

  Struts2配置方式数据校验

  校验的XML配置文件

  0. 该配置文件验证的xml文件的规范在xwork-core-2.1.6.jar包下的:xwork-validator-1.0.3.dtd

  1. 命名方式ActionClassName-validation.xml 放置在同Action的包下,引入DTD规范的时候参见0步骤中的约束文件

  2. 配置

<?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.userName">
<field-validator type="requiredstring"><message>用户名不能为空</message>
</field-validator>
</field><field name="user.password">
<field-validator type="requiredstring"><message>密码不能为空</message>
</field-validator>
</field></validators>

  3. 校验器的类型参见以下文件

  xwork-core-2.1.6.jar\com\opensymphony\xwork2\validator\validators\default.xml

  如何配置校验器?

  直接API中查看校验器即可在文档中查看到XML的配置校验方式拷贝即可。

  required: 确保某给定字段的值不是空值 null

  requiredstring: 确保某给定字段的值既不是空值 null, 也不是空白.trim 参数. 默认为 true, 表示 struts 在验证该字段值之前先剔除前后空格.

  stringlength: 验证一个非空的字段值是不是有足够的长度.

  minLength: 相关字段的最小长度. 若没有给出这个参数, 该字段将没有最小长度限制

  maxLength:相关字段的最大长度. 若没有给出这个参数, 该字段将没有最大长度限制

  trim: 在验证之前是否去除前后空格

  int: 检查给定字段的值是否可以被转换为一个整数且在一定范围

  min: 相关字段的最小值. 若没给出这个参数, 该字段将没有最小值限制

  max: 相关字段的最大值. 若没给出这个参数, 该字段将没有最大值限制

  date: 确保某给定日期字段的值落在一个给定的范围内

  max:相关字段的最大值. 若没给出这个参数, 该字段将没有最大值限制

  min:相关字段的最小值. 若没给出这个参数, 该字段将没有最小值限制

  email: 检查给定 String 值是否是一个合法的 email

  url: 检查给定 String 值是否是一个合法的 url

  regex: 检查某给定字段的值是否与一个给定的正则表达式模式相匹配.

  expresssion*: 用来匹配的正则表达式

  caseSensitive: 是否区分字母的大小写. 默认为 true

  trim: 是否去除前后空格. 默认为 true

  conversion: 转换校验器,指定在类型转换失败时,提示的错误信息

  visitor: 用于校验action中的复合属性,它指定一个校验文件用于校验复合属性中的属性

  expression: OGNL表达式校验器,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过,该校验器不可用在字段校验器风格的配置中

  double: 双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值

Struts2内置的数据校验器校验规则配置

<!-- required  必填校验器-->
<field-validator type="required"><message>性别不能为空!</message>
</field-validator><!--  requiredstring  必填字符串校验器-->
<field-validator type="requiredstring"><param name="trim">true</param><message>用户名不能为空!</message>
</field-validator><!-- stringlength  字符串长度校验器-->
<field-validator type="stringlength"><param name="maxLength">10</param><param name="minLength">2</param><param name="trim">true</param><message><![CDATA[产品名称应在2-10个字符之间]]></message>
</field-validator> <!-- int   整数校验器-->
<field-validator type="int"><param name="min">1</param><param name="max">120</param><message>年龄必须在1-120之间</message>
</field-validator><!-- 字段OGNL表达式校验器-->
<field name="imagefile"><field-validator type="fieldexpression"><param name="expression"><![CDATA[imagefile.length() <= 0]]></param><message>文件不能为空</message></field-validator>
</field><!--  email   邮件地址校验器-->
<field-validator type="email"><message>电子邮件地址无效</message>
</field-validator><!--  regex  正则表达式校验器-->
<field-validator type="regex"><param name="expression"><![CDATA[^13\d{9}$]]></param><message>手机号格式不正确!</message>
</field-validator>

当为某个action提供了ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml两种规则的校验文件时,系统按下面顺序寻找校验文件:

1、AconClassName-validation.xml

2、ActionClassName-ActionName-validation.xml

系统寻找到第一个校验文件时还会继续搜索后面的校验文件,当搜索到所有校验文件时,会把校验文件里的所有校验规则汇总,然后全部应用于处理方法的校验。如果两个校验文件中指定的校验规则冲突,则只使用后面文件中的校验规则。

当action继承了另一个action,父类action的校验文件会先被搜索到。假设UserAction继承BaseAction, UserAction在struts.xml的配置如下:
<action name="user" class="cn.itcast.action.UserAction" method="{1}">
    .....
</action>
访问上面名为user的action,系统先搜索到BaseAction-validation.xml, BaseAction-user-validation.xml,接着搜索到UserAction-validation.xml, UserAction-user-validation.xml。校验规则是这四个文件的总和。

struts表单数据校验相关推荐

  1. Struts2表单数据校验

    Struts2表单数据校验 手工方式 Struts2 如何进行表单验证( ( 手工方式) ) 定义需要校验的表单login.jsp(Struts2标签) Action继承ActionSupport(提 ...

  2. SSM项目实战之二十四:表单数据校验

    表单数据校验 前言 前端页面 测试 前言 在前面的文章中我们并没有对表单提交的数据做校验,本文主要以添加用户为例介绍如何对表单数据添加校验. 前端页面 首先把原先的提交按钮换掉,设置一个点击函数 为表 ...

  3. VantUI(ZanUI)框架使用async-validator进行表单数据校验

    原创文章, 转载请私信. 订阅号 tastejava 学习加思考, 仔细品味java之美 前端UI框架与async-validator介绍 VantUI是一款有赞出品的基于Vue的前端手机端开发框架 ...

  4. form表单数字校验(二)——邮箱校验-当前页面

    form表单数字校验(二)--邮箱校验-当前页面 效果 代码 index.vue <el-form-item v-if='!isDisabled' label='邮箱'><el-in ...

  5. html5 数据验证,【译】表单数据校验

    当你需要经常在服务器上校验数据时,在Web页面上的另加校验就有诸多好处.多数情况下,用户会被表单惹恼.而当用户填完表单时就校验数据,既有助于用户立即发现他们犯的错误,也能减少等待HTTP响应的时间.并 ...

  6. html 数据校验,表单数据校验

    有时,例如使用旧版浏览器或自定义小部件,您将无法(或不希望)使用约束校验API. 在这种情况下,您仍然可以使用 JavaScript 来校验您的表单. 校验表单比起真实数据校验更像是一个用户界面问题. ...

  7. antd form 表单数据校验·记

    目录 一.antd form 表单校验语法 二.antd form 表单校验规则 三.antd form 表单校验实例 1.一般的表单校验 2.连续的表单校验 3.连续的复杂表单校验 (1).Form ...

  8. spring MVC组件开发-表单数据校验

    在实际工作中,得到数据后的第一步就是校验数据的正确性,如果存在录入上的问题,一般先经过前端js进行验证,但是前端有多种方式可以绕过前端js验证(不是安全有效的),为了数据安全性一般还需要在服务器端做数 ...

  9. Struts 2的输入校验(一)

    9 Struts 2的输入校验 输入校验有两种:客户端和服务器端校验.客户端校验一般是通过JavaScript来完成,这种校验可减轻服务器压力.服务器校验主要通过服务器端编程的方式来完成. (1) 客 ...

最新文章

  1. Python 23天 序列化
  2. 路由器距离向量算法计算举例_距离向量路由选择是什么 距离向量路由选择原理介绍【图文】...
  3. 研磨设计模式之 策略模式--转
  4. 你写的 Python 代码可以更“瘦”
  5. 拼图推迟将Java 9的发布日期推迟到2017年
  6. 苏炳添:发C刊与拿冠军相比,哪个更难?
  7. mongodb 排序_技术分享 | MongoDB 一次排序超过内存限制的排查
  8. iOS 静态库和动态库的基本介绍和使用
  9. 2017.3.12 lzy 测试
  10. List<T>和List<?>的区别
  11. 让我们用 SQL 开发一个图形数据库吧
  12. 注册flash.ocx inno setup (转)
  13. 2016年考研数学一解析 ​​​
  14. juk互粉攻略set结构体
  15. ffmpeg js转换音频_实现纯前端下的音频剪辑处理
  16. H3C的前世今生及它的基础配置
  17. html京东 重置代码,拟写京东登录界面(HTML - CSS)
  18. Android surfaceview 自定义相机 拍照(闪光灯、前后摄像头)
  19. 全铝合金家居零甲醛家具展示
  20. 布尔矩阵与自动推荐系统

热门文章

  1. 微信提示浏览器打开代码升级版 微信自动跳转默认浏览器
  2. 企业短信群发的作用及优势
  3. i7-1185G7怎么样 相当于什么水平
  4. [ArchLinux] 安装及KDE桌面环境安装配置
  5. js截取字符串兼容中英文
  6. 合同没到期辞退员工赔偿多少金额
  7. 【Linux鸟哥笔记】20-启动流程、模块管理与Loader
  8. 如何高效遍历HashMap
  9. 普鲁斯特问卷的26个问题
  10. java comparator 排序_Java8 Comparator 排序方法