struts2学习之表单校验的两种方式
基于覆盖validate方法的表单校验
Action类一般都继承ActionSupport类。
通过覆盖ActionSupport类的validate方法即可在自己的Action类中校验输入项的值。
校验动作类中的所有方法
UserAction类
package com.struts2.action.example;import java.io.Serializable;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport implements Serializable {private static final long serialVersionUID = 7553541763848145723L;private String username;// 用户名不能为空,还要去掉首尾空格private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String add() {System.out.println("执行了user的add方法");return SUCCESS;}public String update() {System.out.println("执行了user的update方法");return SUCCESS;}//对动作类中的所有方法进行验证@Overridepublic void validate() {//验证方法。只考虑不符合条件的if(username==null||"".equals(username.trim())){addFieldError("username", "用户名不能为空");}if(password==null||!password.matches("\\w{6,16}")){addFieldError("password", "密码不能为空且必须是6~16位的大小写字母或数字");}}}
校验动作类中的指定方法
将上面动作类的validate方法改写如下
public void validateAdd() {if (username == null || "".equals(username.trim())) {addFieldError("username", "用户名不能为空");}if (password == null || !password.matches("\\d{3,6}")) {addFieldError("password", "密码不能为空且必须是3~6位的数字");}
}
即指定只校验add方法。
形如public void validateXxx()的方法,即为校验指定Xxx方法,Xxx代表的是要验证的动作方法名,要把动作方法名的首字母变为大写。
struts.xml内容
<package name="validation" namespace="/validation" extends="struts-default"><action name="user_*" class="com.struts2.action.example.UserAction" method="{1}"><result name="success">/WEB-INF/jsp/success.jsp</result><result name="input">/{1}User.jsp</result></action>
</package>
name=user_*,为使用通配符的方式访问动作类中指定的方法
method={1},为使用占位符的方式获取通配符中的方法名
addUser.jsp内容
<form action="${pageContext.request.contextPath}/validation/user_add.action" method="post">用户名:<input type="text" name="username" value="${param.username }"/><s:fielderror fieldName="username"/><br/>密码:<input type="password" name="password" value="${param.password }"/> <s:fielderror fieldName="password"/><br/><input type="submit" value="保存"/>
</form>
访问地址http://localhost:8080/Struts2/addUser.jsp
直接点提交按钮提示如下:
按validation方法里的逻辑填写正确的输入项后,控制台输出结果如下:
成功通过了验证,并执行了Action类的add方法。
基于xml文件的表单校验
校验动作类中的所有方法
把动作类的validate方法注释掉,并添加UserAction-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">
<!-- 基于配置文件的表单验证
1,动作类中指定的方法进行验证:配置文件名:动作类名-动作名(配置文件中的动作名)-validation.xml,
如,UserAction-user_add-validation.xml2,验证动作类中的所有方法:配置文件名:动作简单类名-validation.xml,如,UserAction-validation.xml--> <validators><validator type="requiredstring"><param name="fieldName">username</param><message>用户名不能为空!</message></validator><field name="password"><field-validator type="requiredstring"> <message>密码不能为空!</message></field-validator><field-validator type="regex"> <param name="regex"><![CDATA[\w{6,16}]]></param><message>密码可以为6~16位数字和字母的组合!</message></field-validator></field></validators>
普通校验和字段校验
普通校验
eg:
<validator type="requiredstring"><param name="fieldName">username</param><message>用户名不能为空!</message>
</validator>
字段验证
一般比普通验证更可取,因为可设置多个字段验证器
<field name="username"><field-validator type="requiredstring"><message>用户名不能为空!</message></field-validator><field-validator type="email"> <message>用户名必须邮箱账号!</message></field-validator>
</field>
校验动作类中的指定方法
只要把上面的校验文件名改成UserAction-user_add-validation.xml即可。
其中user_add匹配struts.xml文件中的user_*
xml校验配置文件名的写法
以下两种写法有共同的验证效果
<actionClass>-validation.xml
<actionClass>-<actionAlias>-validation.xml
我们可将常见(共同)的校验写在<actionClass>-validation.xml
中,更具体的上下文内容写在<actionClass>-<actionAlias>-validation.xml
中,
框架将验证这两个验证配置文件中可用的验证器。如果两个验证配置文件中定义了一样的验证器,那么当验证不通过时,将发现2个错误,这是由于struts2框架将合并发现在两个验证配置文件中的验证信息。
已定义的验证器
在com/opensymphony/xwork2/validator/validators/default.xml文件中定义。
包括:
- conversion validator
- date validator
- double validator
- email validator
- expression validator
- fieldexpression validator
- int validator
- regex validator
- required validator
- requiredstring validator
- short validator
- stringlength validator
- url validator
- visitor validator
- conditionalvisitor validator
Action类的验证器是怎样被找到
struts2框架将搜索action的继承树寻找这个action类默认校验的接口和父类。
总结
- 当用户按下注册表单提交按钮,Struts2将用户的输入传送到Action或javabean的实例字段。然后,Struts2会自动执行validate方法。如果有任何的if语句为真,Struts2将自动调用其addFieldError方法(我们的Action类继承扩展了ActionSupport)添加错误信息。
如果有任何错误已被添加那么Struts2将不会进行调用execute方法。Struts2框架将返回“input”作为调用Action后的结果。 - 形如UserAction-validation.xml验证文件必须和起动作类放在同一包下,否则不起作用。
- 当使用字段验证时,字段验证语法总是更可取比使用普通验证语法,因为它有利于根据字段字段校验分组。这是非常方便特别是如果一个字段需要有许多字段验证,这几乎总是如此。
- Action类中的validate方法优先于execute方法当被struts框架调用时,若验证出错,将返回“input”,如验证通过,则调用execute方法并返回execute方法的返回值。
以上。。。
struts2学习之表单校验的两种方式相关推荐
- python表单提交的两种方式_Flask框架学习笔记之表单基础介绍与表单提交方式
本文实例讲述了Flask框架学习笔记之表单基础介绍与表单提交方式.分享给大家供大家参考,具体如下: 表单介绍 表单是HTML页面中负责数据采集功能的部件.由表单标签,表单域和表单按钮组成.通过表单,将 ...
- python表单提交的两种方式_详解flask表单提交的两种方式
一.通用方式 通用方式就是使用ajax或者$.post来提交. 前端html ... data Submit   将操作绑定 $(document).ready(function() ...
- php表单传值哪几种方式,PHP表单传值的方式有哪些?
本篇文章主要给大家介绍PHP表单传值的两种方式,一种是通过$_GET变量 .另一种是通过$_POST变量.(相关推荐:<PHP教程>) 下面我们就结合具体的PHP代码示例给大家介绍,PHP ...
- 自我总结和学习表单提交的几种方式 (一)
最近总是记不住表单提交的几种方式,并且各种方式的适应场景也不知道,干脆来总结一次,当再学习过程. 首先从最简单的开始练手: [1]纯form表单形式,无js和ajax ,提交路径有action决定,方 ...
- jquery ajax提交表单数据的两种方式
jquery ajax提交表单数据的两种方式 转载于:https://www.cnblogs.com/zhujiabin/p/4912364.html
- Form 表单提交的几种方式
简单的总结一下form表单提交的几种方式: 1.最简单的方式 就用form的submit提交方式,这种提交方式是不需要回调函数的 这种方式最近到一个form提供action路径后台接受就可以 & ...
- Struts2-表单验证的两种方式
1. Struts2中的输入校验 2. 编码方式校验 1) Action一定要继承自ActionSupport 2) 针对某个要进行校验的请求处理方法编写一个 public void vali ...
- EXCEL数据有效性前置校验的两种方式
背景: 生活中经常用excel作为模板供用户批量录入数据,然后在上传系统,等到系统校验有问题后,用户又要下载进行修改重新上传,这样比较麻烦,所以如何把问题数据的发现阶段前置到用户录入的阶段,那么有问题 ...
- onsubmit阻止表单提交的一种方式
最近做移动开发,一下从后台转移到前端了,之前写了一年的java代码,现在天天搞jQ css html ,肯定有点不习惯,不过现在已经适应了,写页面还是挺好玩的. 言归正传,今天遇到的就是怎么阻止表单 ...
最新文章
- SystemCenter2012SP1实践(5)SCVMM管理HyperV
- 如何在Android手机上进行Google Map的开发。
- mysql 后十条_mysql几十条常用命令归纳总结
- dede文章调用时过滤调 body里面的style属性和值
- Spring5的通信报文
- java有没有number数据类型_Java基本数据类型之Number
- java 工厂模式的写法_java简单工厂模式是什么
- 跟2G说再见?这些IoT“钉子户”表示做不到……
- ims系统 呈现服务器,基于IMS的呈现服务器的设计与实现
- javascript 模块化(一)——SeaJS
- 使用vue实现四级联动
- iOS定位获取城市名
- 耳机插入电脑的,耳机接口,却没有声音的 解决方法
- 高质量的博客评论外链有用么?
- 团队任务1:第一次团队会议
- OpenCV-细化算法(thinning algorithm)描绘出轮廓的中心线
- Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
- 目标检测入坑指南3:VGGNet神经网络
- 线程wait和notify方法
- css渐变效果的实现
热门文章
- 西北电力外送争夺战 竞争将更加激烈
- 硝酸硫胺素-市场现状及未来发展趋势
- Java笔记名晨总结08-类和对象 - 中级
- 来客推开源电商系统部署环境
- 【Maven进阶三】 Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.4……
- 从ofo小黄车谈人性
- 在matlab中三维表面采用,在Matlab中插入三维圆柱体的表面
- 华为云devops认证考试课堂笔记3
- 1.宏电工控机使用心得
- Day 169/200 Vue3 如何设置定时器以及清除定时器?