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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 11:49:49

struts2学习笔记(7)---数据验证之validateXxx()方法的相关文章

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

根据官网的教程 ( http://www.thinkphp.cn/info/171.html ),数据验证的使用静态定义方式 ( 以 regex 为例 ) 无法验证数据: 而采用动态验证则正常: 控制器: <?php class IndexAction extends Action { public function add(){ $articleObj = D("Article"); $rules = array( array('title','require','请填写标题'

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

Struts2的数据校验属于服务器端校验,Struts2 支持校验方式 : 手动校验(代码校验) :在服务器端通过编写java代码,完成数据校验 自动校验(配置校验) :XML配置校验(主流) 和 注解配置校验 1.手动校验 1)Struts2的手动校验步骤: 首先要从页面中获取对应的标签name属性的值,在动作类action中声明同名的属性,提供get和set方法; 要继承ActionSupport类或者实现Validateable接口: 重写Validateable接口的validate()

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

改变显示字段名称 设计字段规范 1.引用 1 using System.ComponentModel; 2 using System.ComponentModel.DataAnnotations; 2.DisplayName值 public class Book { public int BookID { get; set; } [DisplayName("ISBN")] public string isbn { get; set; } [DisplayName("图书名称:

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

操作环境:(1)Tomcat 7.0.72.0 (2)OS Name: Windows 7  (3)JVM Version:  1.8.0_25-b18  (4)eclipse Version: Kepler Service Release 2 (5)struts2 version:struts2-core-2.5.10.1 1.通配符访问方法,报错404错误找不到页面 (1)错误原因:struts.xml中缺少<global-allowed-methods>regex:.*</glob

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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75

struts2学习笔记(三)—— 在用户注册程序中使用验证框架

实现目标: 1.使用验证框架对用户注册信息进行验证 2.验证用户名.密码.邮箱不能为空 3.验证用户名.密码长度 4.验证邮件地址格式 具体实现 一.Struts2应用的基础配置 这里不做详细阐述,具体为web.xml.相关jar包的配置 二.将页面显示的文本内容放到资源文件中 1.查看用户注册程序中的所有页面,找到所有可以显示的文本内容,将它们分离出来放到资源文件中. 2.与相关的Action类同名,以.preperties为扩展名,与Action类位于同一个包中,只能由该Action访问 R

Struts2 学习笔记(概述)

Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并实现应用的功能.通常分为数据模型和业务逻辑模型,数据模型用来存放业务数据,比如订单信息.用户信息等:而业务逻辑模型包含应用的业务操作,比如订单的添加或者修改等. 封装应用状态:某些应用数据封装起来,使得视图只能通过接口获取对应的数据 响应状态查询:对应用的状态改变进行处理 暴露应用功能:暴露接口 通

struts2学习笔记(7)------------ognl表达式

OGNL表达式(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言.是一种可以方便地操作对象属性的开源表达式语言. Struts2自行维护一个特定范围的"银行",Action将数据放入其中,而JSP页面可从中取数据,表面上似乎看起来像是jsp可以直接访问Action数据.. 当Action属性不再是简单的值,而是某个对象,数组,集合时,就需要使用ognl表达式来访问这些对象,数组,集合内的数据了. 1)ognl的stack Conte

struts2学习笔记(5)----------配置result

Action只负责处理请求,负责生成响应的视图组件,一般是JSP页面,而Action为JSP页面提供显示的数据.Action处理请求结束后,控制器根据<result>元素配置的逻辑视图跟物理视图之间的关系来响应. 浏览器,控制器和视图资源的顺序图如下: 如图所示,Action处理完一个请求后,并未直接把请求转发给任何具体的视图资源,而是返回给一个逻辑视图,struts2框架收到这个逻辑视图后,把请求转发到对应的物理视图资源,试图资源将结果呈现给用户. 1)result基本配置 struts2提