用户输入验证

来源:互联网 发布:excel数据清洗方法 编辑:程序博客网 时间:2024/05/23 22:25

这里我们来讨论 用户输入验证的两种方式:基于手工编程验证、基于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 0
原创粉丝点击