码迷,mamicode.com
首页 > 其他好文 > 详细

struts2学习笔记(7)---数据验证之validateXxx()方法

时间:2015-07-14 11:40:23      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:校验   struts2   validate   

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()方法

标签:校验   struts2   validate   

原文地址:http://blog.csdn.net/u013539342/article/details/46873679

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!