struts2 数据校验

 

struts2 后端数据校验有两种方式,一种是通过action类继承ActionSupport类实现,另一种则是通过校验框架实现。


 

一、继承ActionSupport类

按照惯例,先编写pojo类、jsp页面以及action处理类,具体如下

 

public class User {
    private String name;
    private String psw;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPsw() {
        return psw;
    }

    public void setPsw(String psw) {
        this.psw = psw;
    }
}
<form action="login.action" method="post">
    username:<input type="text" name="user.name" placeholder="不少于2个字符"/><br/>
    password: <input type="text" name="user.psw"/><br/>
    checkNumber:<input type="text" name="checkNum" placeholder="验证码" /><br/>
    <input type="submit" value="submit"/>
</form>
public class LoginAction extends ActionSupport {
    private User user;
    private String checkNum; //验证码

    @Override
    public void validate() {
        System.out.println("validate");
        if(!"0000".equals(checkNum)){
            // 添加错误信息
            // param1 页面中数据来源的数据域name
            // param2 对应的错误提示
            this.addFieldError("checkNum","验证码错误");
        }
    }

    public void validateLogin(){
        System.out.println("validateLogin");
        // 校验username
        if(user.getName().length() < 2){
            // 添加错误信息
            // param1 页面中数据来源的数据域name
            // param2 对应的错误提示
            this.addFieldError("user.name","用户名不合法");
        }
    }

    public String login(){
        System.out.println("login");
        return Action.SUCCESS;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public String getCheckNum() {
        return checkNum;
    }

    public void setCheckNum(String checkNum) {
        this.checkNum = checkNum;
    }
}

我用的对象驱动,jsp页面需要输入name、psw和checkNumber。

validate方法在action类里的每个业务方法得到执行前执行,这里的业务方法指的是struts.xml中注册的方法,而validateLogin方法只是在login业务方法执行前执行,不论是validate方法,还是validateLogin方法,只要数据校验不通过,就可以调用addFileError方法,该方法两个参数的作用已注释说明。校验不通过的话,就会在result中寻找name属性为"INPUT"的。

于是,我们就可以把通用的校验放在validate中实现,而具体业务校验在methodName业务方法的校验方法validateMethodName方法实现。

方法执行顺序是,先执行具体业务校验方法,接着执行validate方法,如果前面的校验都通过了(注意执行validate方法与否与具体业务校验方法的校验结果无关),最后就会执行业务方法。

 


addFieldError方法中的参数信息,即错误提示信息,可以在jsp页面中用struts2的标签语言得到显示,格式如 <s:fielderror fieldName="user.name"></s:fielderror> 具体如下

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>

<form action="login.action" method="post">
    username:<input type="text" name="user.name" placeholder="不少于2个字符"/><s:fielderror fieldName="user.name"></s:fielderror><br/>
    password: <input type="text" name="user.psw"/><br/>
    checkNumber:<input type="text" name="checkNum" placeholder="验证码" /><s:fielderror fieldName="checkNum"></s:fielderror><br/>
    <input type="submit" value="submit"/>
</form>

 


二、校验框架

    1.此时不需要validate方法,只需继承继承ActionSupport类,所以将LoginAciton类改为如下

public class LoginAction extends ActionSupport {
    private User user;
    private String checkNum; //验证码

    public String login(){
        System.out.println("login");
        return Action.SUCCESS;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public String getCheckNum() {
        return checkNum;
    }

    public void setCheckNum(String checkNum) {
        this.checkNum = checkNum;
    }
}

 

      2.编写xml配置文件

该文件命名如 ActionClassName-validation.xml or ActionClassName-ActionAliasName-validation.xml,位于action类同一目录下,样例如下,需要注意的是文件头要与struts版本对应。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.3//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

<validators>
    <!-- 校验的表单域-->
    <field name="user.name">
        <!-- 校验器-->
        <field-validator type="requiredstring">
            <message>用户名非空</message>
        </field-validator>
        <field-validator type="stringlength">
            <param name="maxLength">5</param>
            <param name="minLength">2</param>
            <message>长度不少于2,不多于5</message>
        </field-validator>
    </field>

    <field name="checkNum">
        <field-validator type="regex">
            <param name="regexExpression"><![CDATA[(0000)]]></param>
            <message>验证码错误</message>
        </field-validator>
    </field>

</validators>

至此,框架校验完毕。

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值