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()方法的更多相关文章

  1. ThinkPHP 学习笔记 ( 五 ) 数据验证

    根据官网的教程 ( http://www.thinkphp.cn/info/171.html ),数据验证的使用静态定义方式 ( 以 regex 为例 ) 无法验证数据: 而采用动态验证则正常: 控制 ...

  2. Struts2学习笔记(九)——数据校验

    Struts2的数据校验属于服务器端校验,Struts2 支持校验方式 : 手动校验(代码校验) :在服务器端通过编写java代码,完成数据校验 自动校验(配置校验) :XML配置校验(主流) 和 注 ...

  3. c# MVC模式学习笔记_数据验证

    改变显示字段名称 设计字段规范 1.引用 using System.ComponentModel; using System.ComponentModel.DataAnnotations; 2.Dis ...

  4. struts2学习笔记——常见报错及解决方法汇总(持续更新)

    操作环境:(1)Tomcat 7.0.72.0 (2)OS Name: Windows 7  (3)JVM Version:  1.8.0_25-b18  (4)eclipse Version: Ke ...

  5. 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 ...

  6. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  7. Struts2学习笔记⑧

    今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...

  8. Windows phone 8 学习笔记(2) 数据文件操作

    原文:Windows phone 8 学习笔记(2) 数据文件操作 Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方 ...

  9. Struts2学习笔记①

    Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...

随机推荐

  1. BZOJ 3931 Dijkstra+网络流

    思路: (我能说按照题意模拟么) 用long long inf 要开大--. //By SiriusRen #include <queue> #include <cstdio> ...

  2. C#-汉字转拼音缩写

    /// 〈summary〉 /// 汉字转拼音缩写 /// Code By MuseStudio@hotmail.com /// 2004-11-30 /// 〈/summary〉 /// 〈para ...

  3. IE11 补丁 KB2929437[已过期]

    2014年4月 请更新此补丁 KB2929437 开发人员工具有重要更新 DOM 面板右侧新增 "更改"面板,用于记录调试时修改的 CSS Rules: JS 调试面板,新增 so ...

  4. German Collegiate Programming Contest 2015(第三场)

    Divisions David is a young boy and he loves numbers. Recently he learned how to divide two numbers.D ...

  5. WebRTC Native APIs

    WebRTC Native APIs The WebRTC Native APIs implementation is based on W3C’s WebRTC 1.0: Real-time Com ...

  6. [ZJOI2012]旅游(树的直径)

    [ZJOI2012]旅游 题目描述 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示 ...

  7. linux基础入门(二)命令

    原创作品,允许转载,转载时请务必声明作者信息和本声明. https://www.cnblogs.com/zhu520/p/10732334.html =[本人小白,有错指出.谢谢! 一:使用Secur ...

  8. 解决Python 插查 MySQL 时中文乱码问题

    首先找到这里的解决方法, count = cursor.fetchall() for i in count: idc_a = i[0] if isinstance(idc_a, unicode): i ...

  9. Ubuntu14.04下安装和&quot;激活&quot;Office2010ProPlus与Visio2010(15.11.20Updated)

    本人用Ubuntu的时候全然没有打游戏的欲望,故而能够更高效的工作. 尽管说LibreOffice.WPS等等有Ubuntu版本号,可是用着还是没有微软的Office顺手,故而折腾了一下怎样安装Off ...

  10. TRIZ系列-创新原理-7-嵌套原理

    原理表述例如以下: 1)把一个物体嵌入另外一个物体.然后将这两个物体再嵌入第三个物体,以此类推. 这个原理又叫俄罗斯娃原理,目的是在不影响原有功能的情况下: A) 在须要时.能够降低系统的体积和便于携 ...