用户输入验证

这里我们来讨论 用户输入验证的两种方式:基于手工编程验证、基于Xml文件验证。
一、基于手工编程:
1、验证该动作类的所有方法:
(1)、在struts.xml中,创建相关的动作类,在书写标签的时候,记得把input这个返回值也写上,因为一旦在数据类型转换或者验证失败,都回转到input对应的结果处理。(这里为什么有类型转换?因为在许多Mvc框架中,类型转换和验证是不分家的,看struts2的拦截器加载顺序,是先类型转换器,然后是验证器,最后就是方法的调用,这个顺序就是说,当调用方法的前两个动作,只有1个出错,它都不会调用方法,在类型转换或者验证时出现的错误信息,被框架记录在fieldError中,其中维护着一个Map。)
代码如下:

    <package name="p1" namespace="/ns1" extends="struts-default">
        <action name="validate1_add" class="cn.ansel.validator.validate1" method="add">
            <result name="success">/add.jsp</result>
            <result name="input">/validate.jsp</result>
        </action>
    </package>

(2)、编写相关的用户输入页面,并定义好字段名以及目标动作类(参照struts.xml)
代码如下:

    <form action="${pageContext.request.contextPath}/ns1/validate1_adde" method="post">
        username:<input type="text" name="username"/><br/>
        password:<input type="text" name="password"/><br/>
        <input type="submit" value="go"/>
    </form>

(3)、根据struts.xml中对应动作,创建一个对应动作类及方法,并继承actionSupport
(4)、覆写其中的validate方法
(5)、在方法中输入自己的验证方法。
代码如下:

package cn.ansel.validator;

import java.io.Serializable;

import com.opensymphony.xwork2.ActionSupport;

public class validate1 extends ActionSupport implements Serializable {
    private String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String add(){
        return SUCCESS;
    }
    public String update(){
        return SUCCESS;
    }
    @Override
    public void validate() {
        //手工编程验证:
        //1、判断用户名是否为null 或者空字符串,
        if(username==null||"".equals(username.trim())){
        //是的话放信息的addFiledError的Map中
            addFieldError("username", "username can not be null");
            }
        //判断密码是否为3-6位的数字,不是的话也放信息到addFiledError的mAP中
        if(password==null ||!password.matches("\\d{3,6}")){
            addFieldError("password", "password can only be numbers which length between 3 and 6");
        }
    }
}

(6)使用struts标签,在input结果的处理页面中,现实错误信息
代码如下:

<s:fielderror fieldName="username"></s:fielderror>
<s:fielderror fieldName="password"></s:fielderror>

2、验证该动作类的指定方法
步骤与上一致,只是不覆写动作类的validate方法,而是覆写validate方法名,但是方法名第一个字母要大写。代码如下:

    public void validateAdd(){
        //手工编程验证:
        //1、判断用户名是否为null 或者空字符串,
        if(username==null||"".equals(username.trim())){
        //是的话放信息的addFiledError的Map中
            addFieldError("username", "username can not be null");
            }
        //判断密码是否为3-6位的数字,不是的话也放信息到addFiledError的mAP中
        if(password==null ||!password.matches("\\d{3,6}")){
            addFieldError("password", "password can only be numbers which length between 3 and 6");
        }
    }

在这里需要注意的是,如果使用了指定方法验证,就应该把validate方法去掉,否则会验证2次。

二、基于xml文件验证:
1、验证动作类中的所有方法:
(1)、与上面不同的是,把上面中动作类的所有validate的相关方法去掉
(2)、在与动作类相同的包中建立名称为动作类-validation.xml文件

validate1-validation.xml

(3)、在xwork.core.jar文件中,打开xwork.validator-1.0.3.dtd(如果还没有提示的话,把整个文件拷贝作备用),复制里面dtd的引用:

<!DOCTYPE validators PUBLIC
        "-//OpenSymphony Group//XWork Validator 1.0.3//EN"
        "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">

(4)、在复制及设置提示完成后,开始设置里面的验证,代码如下:


 <validators>
    <field name="username">
        <field-validator type="requiredstring">
            <message>the username can not be null</message>         
        </field-validator>
    </field>
    <field name="password">
        <field-validator type="requiredstring">
            <message>the password can not be null</message>
        </field-validator>
        <field-validator type="regex">
            <param name="expression"><![CDATA[/d{3,6}]]></param>
            <message>the password must contain 3 to 6 numbers</message>
        </field-validator>
    </field>
 </validators>

2、对于指定的方法进行验证:
直接更改xml文件名即可,格式为:动作类-动作名(struts.xml中的动作名)-validation.xml

validate1-validate1_add-validation.xml

以上

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值