struts2学习笔记(7)---数据验证之validateXxx()方法
validateXxx()方法
上一篇文章写了使用Action的validate()方法,validate()仅仅能对action的所有方法进行验证。而要实现对action中特定的方法进行验证,就须要使用validateXxx()方法。
validateXxx()仅仅会校验action中方法名为xxx的方法。当中Xxx的第一个字母要大写。
源码
UserAction.java
package org.dny.action;
import org.dny.model.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class UserAction extends ActionSupport implements ModelDriven<User>{
private User user;
@Override
public User getModel() {
if(this.user == null)
this.user = new User();
return this.user;
}
public String login() { //登录
System.out.println("UserAction login");
System.out.println("userName:"+user.getUserName());
System.out.println("paswword:"+user.getPassword());
return "loginSuccess";
}
public void validateLogin() {
System.out.println("UserAction validateLogin");
if(user.getUserName() == null || user.getUserName().trim().equals(""))
this.addFieldError("loginUserName", "帐号不能为空"); //给loginUserName属性加入错误消息“帐号不能为空”
if(user.getPassword() == null || user.getPassword().trim().equals(""))
this.addFieldError("loginPassword", "密码不能为空");
}
public String register() { //注冊
System.out.println("UserAction register");
System.out.println("userName:"+user.getUserName());
System.out.println("paswword:"+user.getPassword());
return "registerSuccess";
}
public void validateRegister() {
System.out.println("UserAction validateRegister");
if(user.getUserName() == null || user.getUserName().trim().equals(""))
this.addFieldError("registerUserName", "帐号不能为空"); //给registerUserName属性加入错误消息“帐号不能为空”
if(user.getPassword() == null || user.getPassword().trim().equals(""))
this.addFieldError("registerPassword", "密码不能为空");
}
@Override
public void validate() {
System.out.println("UserAction validate");
}
}
这里的UserAction中有login()和register()两个方法,以及与二者相应的validateLogin()和validateRegister()验证方法。
struts.xml配置
<action name="user_*" class="org.dny.action.UserAction" method="{1}">
<result name="loginSuccess">/success.jsp</result>
<result name="registerSuccess">/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
登陆成功或者注冊成功都会跳转到success.jsp页面。而验证失败时会跳转到index.jsp页面。
index.jsp页面
<center>
登录<br>
<!-- 登录 -->
<form action="user_login" method="post">
<table>
<tr>
<td>帐号:</td>
<td><input type="text" name="userName"></td>
<td>
<!-- 通过EL表达式取出 fieldErrors中loginUserName的值 -->
${fieldErrors['loginUserName'][0]}
</td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"></td>
<td>
<!-- 通过EL表达式取出 fieldErrors中loginPassword的值 -->
${fieldErrors['loginPassword'][0]}
</td>
</tr>
<tr>
<td></td>
<td align="left"><input type="submit" value="登录"> <input
type="reset" value="重置">
</tr>
</table>
</form>
</center>
<hr>
<center>
错误信息<br>
<!-- 通过EL表达式取出 fieldErrors中所有的错误消息 -->
通过EL表达式取出 fieldErrors中所有的错误消息:<br> ${fieldErrors}<br>
<br>
<!-- 通过struts标签取出fielderror中所有的错误消息 -->
通过struts标签取出fielderror中所有的错误消息:
<s:fielderror />
</center>
<hr>
<center>
注冊<br>
<!-- 注冊 -->
<form action="user_register" method="post">
<table>
<tr>
<td>帐号:</td>
<td><input type="text" name="userName"></td>
<td>
<!-- 通过EL表达式取出 fieldErrors中registerUserName的值 -->
${fieldErrors['registerUserName'][0]}
</td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"></td>
<td>
<!-- 通过EL表达式取出 fieldErrors中registerPassword的值 -->
${fieldErrors['registerPassword'][0]}
</td>
</tr>
<tr>
<td></td>
<td align="left"><input type="submit" value="注冊"> <input
type="reset" value="重置">
</tr>
</table>
</form>
</center>
<hr>
<center>
<s:debug />
</center>
运行结果及截图
验证流程
1、类型转换器对请求參数运行类型转换。并把转换后的值赋给action中的属性。
2、假设在运行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息加入到fieldErrors里。
无论类型转换是否出现异常,都会进入第3步。
3、系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。
4、再调用action中的validate()方法。
5、经过上面4步。假设系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自己主动将请求转发至名称为input的视图。
假设系统中的fieldErrors没有不论什么错误信息。系统将运行action中的处理方法。
參考链接:
http://blog.csdn.net/houpengfei111/article/details/9038233
struts2学习笔记(7)---数据验证之validateXxx()方法的更多相关文章
- ThinkPHP 学习笔记 ( 五 ) 数据验证
根据官网的教程 ( http://www.thinkphp.cn/info/171.html ),数据验证的使用静态定义方式 ( 以 regex 为例 ) 无法验证数据: 而采用动态验证则正常: 控制 ...
- Struts2学习笔记(九)——数据校验
Struts2的数据校验属于服务器端校验,Struts2 支持校验方式 : 手动校验(代码校验) :在服务器端通过编写java代码,完成数据校验 自动校验(配置校验) :XML配置校验(主流) 和 注 ...
- c# MVC模式学习笔记_数据验证
改变显示字段名称 设计字段规范 1.引用 using System.ComponentModel; using System.ComponentModel.DataAnnotations; 2.Dis ...
- struts2学习笔记——常见报错及解决方法汇总(持续更新)
操作环境:(1)Tomcat 7.0.72.0 (2)OS Name: Windows 7 (3)JVM Version: 1.8.0_25-b18 (4)eclipse Version: Ke ...
- Android学习笔记之数据的Sdcard存储方法及操作sdcard的工具类
FileService.java也就是操作sdcard的工具类: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...
- Struts2 学习笔记(概述)
Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...
- Struts2学习笔记⑧
今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...
- Windows phone 8 学习笔记(2) 数据文件操作
原文:Windows phone 8 学习笔记(2) 数据文件操作 Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方 ...
- Struts2学习笔记①
Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...
随机推荐
- html5播放m3u8视频,web端看直播
https://github.com/jiqing9006/hLive <!DOCTYPE html> <html> <head> <meta charset ...
- [Codeforces Round #194 (Div. 2)] Secret 解题报告 (数学)
题目链接:http://codeforces.com/problemset/problem/334/C 题目: 题目大意: 给定数字n,要求构建一个数列使得数列的每一个元素的值都是3的次方,数列之和S ...
- 《剑指offer》二维数组中的查找
一.题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 二.输入描述 ar ...
- 515Nod 1126 求递推序列的第n项【矩阵快速幂】
有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. Input 输 ...
- jQuery的效果函数
jQuery的效果函数有很多,下面让我们一起看看jQuery的效果函数吧: jQuery的效果函数列表: animate():对被选元素应用“自定义”的动画. clearQueue():对被选元素移除 ...
- Linux Putty 复制粘贴
从putty复制: 用左键选中文字,再其他地方点中键就可以粘贴了,不需要右键粘贴. 在putty中粘贴: 在其他地方用左键选中文字,不用右键复制,保持选中文字高亮,然后在putty中点中键 ...
- Highcharts 前端图表插件
Highcharts 支持将图片下载成各种格式 Highcharts官网:https://www.hcharts.cn/download <div id="container" ...
- C++ 输出缓冲区的管理
在C++中,每个I/O对象管理一个缓冲区,用于存储程序读写的数据.本文将对输出缓冲区的管理进行简单的讲解. 举一个简单的例子: myOs << "Please enter a v ...
- /*+parallel(t,4)*/在SQL调优中的重要作用!
谈谈HINT /*+parallel(t,4)*/在SQL调优中的重要作用! /*+parallel(t,4)*/在大表查询等操作中能够起到良好的效果,基于并行查询要启动并行进程.分配任务与系统资源. ...
- 9 hbase源码系列(九)StoreFile存储格式
hbase源码系列(九)StoreFile存储格式 从这一章开始要讲Region Server这块的了,但是在讲Region Server这块之前得讲一下StoreFile,否则后面的不好讲下去 ...