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框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...
随机推荐
- 1 QT设置背景色
首先需要添加头文件#include <QPalette> 然后接下来这样操作: 控件.setAutoFillBackground(true); //这里的控件就是你要设置背景颜色的控件 Q ...
- java9新特性-20-Javascript引擎升级:Nashorn
1.官方Feature 236: Parser API for Nashorn 292: Implement Selected ECMAScript 6 Features in Nashorn 2.使 ...
- java9新特性-15-全新的HTTP 客户端API
1.官方Feature 110: HTTP 2 Client 2.使用说明 HTTP,用于传输网页的协议,早在1997年就被采用在目前的1.1版本中.直到2015年,HTTP2才成为标准. H ...
- js 字符串首字母转为大写 正则
function replaceReg(str){ var reg = /\b(\w)|\s(\w)/g; str = str.toLowerCase(); return str.replace(re ...
- Ubuntu 18.04图形化软件包管理器
1.ubuntu软件这个管理工具提供了一种管理您系统中软件的好方法,通过他可以很直观的查找软件安装很简单,打开终端,输入以下命令:----------------------------------- ...
- 用VUE做网站后台
介绍: 这是一个用vuejs2.0和element搭建的后台管理界面. 相关技术: vuejs2.0:渐进式JavaScript框架,易用.灵活.高效,似乎任何规模的应用都适用. element:基于 ...
- HDU-1541 Stars 树状数组
题目链接:https://cn.vjudge.net/problem/HDU-1541 题意 天上有许多星星 现给天空一个平面坐标轴,统计每个星星的level, level是指某一颗星星的左下角(x& ...
- caioj 1067动态规划入门(一维一边推5: 乘积最大(高精度版))
因为这里涉及到乘号的个数,那么我们可以用f[i][j]表示前i个位乘号为j个时的最大乘积 那么相比上一题就是多了一层枚举多少个乘号的循环,可以得出 f[i][r] = max(f[j - 1][r - ...
- Thumb指令集与ARM指令集的差别
Thumb指令集 Thumb指令能够看做是ARM指令压缩形式的子集.是针对代码密度[1]的问题而提出的.它具有16为的代码密度.Thumb不是一个完整的体系结构,不能指望处理程序仅仅 ...
- bzoj1066【SCOI2007】蜥蜴
1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2512 Solved: 1238 [Submit][Statu ...