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. WebAPI的自动化监控和预警

    Metrics.net + influxdb + grafana 构建WebAPI的自动化监控和预警 前言 这次主要分享通过Metrics.net + influxdb + grafana 构建Web ...

  2. django 笔记17 ModelForm

    Model 数据库操作 验证 验证 Form -class LoginForm(Form): email = fields.EmailField() is_valid 每一个字段进行正则(字段内置正则 ...

  3. [JSOI2008] [BZOJ1567] Blue Mary的战役地图 解题报告 (hash)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1567 Description Blue Mary最近迷上了玩Starcraft(星际争霸 ...

  4. 设置和获取Android中各种音量

    通过程序获取android系统手机的铃声和音量.同样,设置铃声和音量的方法也很简单! AudioManager am = (AudioManager) getSystemService(Context ...

  5. CUDA笔记(七)

    今天集中时间找程序的问题.于是发现: 首先,程序里的kernel想要调试,必须用nsight. 于是一堆找.http://www.nvidia.com/object/nsight.html http: ...

  6. iOS菜鸟成长笔记(2)——网易彩票练习

    距离上一篇<第一个iOS应用>已经有一个多月了,今天来和大家一起学习和分享一下一个小练习<网易彩票> 首先我们向storyboard中拖入一个TabBarController和 ...

  7. hadoop的mapReduce和Spark的shuffle过程的详解与对比及优化

    https://blog.csdn.net/u010697988/article/details/70173104 大数据的分布式计算框架目前使用的最多的就是hadoop的mapReduce和Spar ...

  8. redis动态修改参数

    通过 config get 命令可以查看参数. 通过config set 可以修改某些参数 动态关闭redis的aof功能:(不要忘了也修改配置文件中的aof选项使其保持一致) 127.0.0.1:6 ...

  9. SSL和SSH

    简单的来说:SSL是安全传输的一种安全协议,SSH只是在传输的时候为了防止"中间人"篡改数据而提供的安全的"通道" 在使用的时候我们只关心传输数据的安全性,那么 ...

  10. git diff的文字说明

    -U<n>--unified=<n> Generate diffs with <n> lines of context instead of the usual t ...