struts2学习笔记(6)---数据验证之validate()方法

问题引入

通常在form表单输入数据提交前,会进行输入的验证和限制,比如登陆时账户和密码不能为空,注册时两次输入密码必须一致……一般可用JS进行控制。而struts2中提供了更为便捷的方法。

使用Action的validate()方法

1.Action继承ActionSupport
2.在Action中覆写validate()方法
3.在validate()方法中使用addFieldError()方法,配置struts.xml文件。

源代码

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";
    }

    @Override
    public void validate() {   //在Action的所有其他函数之前函数之前执行,进行验证
        System.out.println("UserAction validate");

        if(user.getUserName() == null || user.getUserName().trim().equals(""))
            this.addFieldError("userName", "帐号不能为空");   //给userName属性添加错误消息“帐号不能为空”
        if(user.getPassword() == null || user.getPassword().trim().equals(""))
            this.addFieldError("password", "密码不能为空");
    }
}

1.函数addFieldError(“字段名”,”错误信息”):给一个字段(属性)添加错误消息
2.点击登录,调用Action的login()方法。而在Action的login()方法执行之前,会先执行validate()方法。
3.如果在validate()方法中执行了addFieldError()或者addActionError()方法,则Action不会执行login()方法,而是直接跳转到一个名为”input”的result视图。

struts.xml文件的action配置:

<action name="user_*" class="org.dny.action.UserAction" method="{1}">
            <result name="loginSuccess">/success.jsp</result>
            <result name="input">/index.jsp</result>
</action>

1.当登录成功时,会跳转到success.jsp页面
2.当输入没有通过validate()函数的验证时,会跳转到首页。

index.jsp页面:

<body>
    <center>
        <!-- 普通的表单提交 -->
        <form action="user_login" method="post">
            <table>
                <tr>
                    <td>帐号:</td>
                    <td><input type="text" name="userName"></td>
                    <td>
                        <!-- 通过EL表达式取出 fieldErrors中userName的值 -->
                        ${fieldErrors['userName'][0]}
                    </td>
                </tr>
                <tr>
                    <td>密码:</td>
                    <td><input type="password" name="password"></td>
                    <td>
                        <!-- 通过EL表达式取出 fieldErrors中password的值 -->
                        ${fieldErrors['password'][0]}
                    </td>
                </tr>
                <tr>
                    <td></td>
                    <td align="left"><input type="submit" value="登录"> <input  type="reset" value="重置">
                </tr>
            </table>
        </form>
    </center>

    <hr>

    <center>
        <!-- 通过EL表达式取出 fieldErrors中全部的错误消息 -->
        ${fieldErrors}<br>
        <!-- 通过struts标签取出fielderror中全部的错误消息 -->
        <s:fielderror />
    </center>

    <hr>

    <center>
        <!-- 使用struts提供的标签的表单,可以在每一个textfield前面显示错误信息 -->
        <s:form action="user_login" method="post">
            <s:textfield name="userName" label="帐号" />
            <s:textfield name="password" label="密码" />
            <s:submit value="提交"></s:submit>
        </s:form>
    </center>

    <hr>
    <center>
        <s:debug/>
    </center>
</body>

1.要使用struts标签,还需在页面首部上加上:

<%@ taglib prefix="s" uri="/struts-tags"%>

2.错误信息fieldErrors既可以由EL表达式取得,又可以由struts标签<s:fielderror />取得。
3.使用<s:form></form>的好处:如果验证错误,错误信息会直接显示在对应属性的textfield前面。

运行结果及截图

1.验证通过,登录成功的情况:
struts2学习笔记(6)---数据验证之validate()方法_第1张图片

struts2学习笔记(6)---数据验证之validate()方法_第2张图片

struts2学习笔记(6)---数据验证之validate()方法_第3张图片

2.验证失败,重新跳转到index.jsp的情况:
struts2学习笔记(6)---数据验证之validate()方法_第4张图片

点击debug标签:
struts2学习笔记(6)---数据验证之validate()方法_第5张图片

你可能感兴趣的:(struts2,validate,数据验证)