Struts2 中的验证方法总结

    xiaoxiao2023-11-22  30

    该文章我于2010年发表在新浪博客上,当时Struts2还比较流行,所以写了这篇文章。

    所有的应用程序都需要对客户输入的数据进行验证,以保证我们存放到数据库中的数据都是正确合理的。验证大致可以分为三层,第一层是客户端的验证。主要使用JavaScript程序进行验证,这部分程序主要验证用户输入的数据类型及大小是否符合我们的要求等等。第二层是服务器端的数据类型、范围、格式等项目的验证。第三层是业务逻辑的验证,例如看一下该对象是否已经存在等等。这里我主要说的是第二层及第三层验证,第一层编写JavaScript代码进行验证的方法我就不做介绍了。

    在Struts2中,验证方法大致可以分为两种类型,第一种类型是在Action类中编写validate()方法,在该方法中进行验证。第二种是写xml配置文件进行验证。每种类型的验证方法中又分为几种形式,下边我一一进行介绍。

    一、在Action类中编写validate()方法进行验证。该方法可以进行第二层和第三层的验证,但主要用来进行第三层验证。

    Struts2中的Action类一般都继承ActionSupport类,类中都有execute()方法,这时默认的调用业务逻辑的方法,验证方法有validate()方法。在validate()中如果验证有错,则通过调用addFieldError(String, String)或者addActionError(String, String)方法将将错误消息发送到Jsp页面显示出来。一个Action类中通常有很多属性,也有很多方法,并不是每个方法都要使用所有的属性,所以也并不是每个方法都需要对所有的属性值进行验证,理想情况下,我只要验证我要执行的方法中用到的属性值就行了。所以validate()又分为两种情况,一种是对整个Action中的属性进行验证,一种是对某个方法中用到的属性进行验证。

    下边的代码是进行用户注册的一个Action,我们将用这段代码作为示例进行介绍。

    package cn.com.huixin.struts2; public class UserAction extends ActionSupport { private int userId; private String username; private String password; private int age; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } 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 int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String execute() throws Exception { System.out.println("UserAction.execute()......"); return SUCCESS; } public String registor() throws Exception { System.out.println("UserAction.registor()......"); return SUCCESS; } @Override public void validate() { System.out.println("UserAction.validate()......"); } public void validateRegistor() { System.out.println("UserAction.validateRegistor()......"); } }

    1、针对整个Action中的属性进行验证的方法:public void validate()。

    这个方法可以针对整个Action中的属性及public String execute()方法中用到的属性进行验证。这个方法在调用Action中的所以业务方法之前进行调用。

    2、针对某个方法中用到的属性进行验证的方法:public void validateRegistor()。

    这种方法的命名规范为:validate+要验证的方法的名字,要验证的方法名的第一个字母大写。如示例中的public void validateRegistor()方法就是针对public String registor()进行验证。在调用public String registor()方法之前会先调用public void validateRegistor()方法,然后调用public void validate(),最后才调用public String registor()执行业务逻辑。值得注意的是public void validate()方法在调用任何一个业务方法之前都会调用它。

    以上的方法主要进行业务逻辑的验证,比如看一下用户名是否已经存在等等。

    二、编写xml配置文件进行验证,主要进行第二层验证。

    1、针对整个Action的属性的验证配置文件。这个xml文件的名字为:要验证的Action的名字+“-validation.xml”。下边的xml配置文件要验证UserAction,所以这个配置文件的名字为“UserAction-validation.xml”,并且这个xml文件放在和要验证的Action的同一个包中。

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <field name="username"> <field-validator type="requiredstring"> <message>Username Is Required!</message> </field-validator> <field-validator type="stringlength"> <param name="maxLength">30</param> <param name="minLength">6</param> <message>Username length must between ${maxLength} and ${minLength}</message> </field-validator> </field> </validators>

    2、针对某个请求的验证配置文件。这个xml文件的名字的命名规则为:Action的名字+“-请求的name属性值(即请求在struts.xml配置文件中的action节点中的name属性值,或者在jsp文件中的form中的action属性的值,由于这两个属性值相同,所以无论哪个都行。)”+“-validation.xml”。

    下边的代码是一个struts.xml的配置文件:

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="struts2" extends="struts-default"> <action name="userRegistor" class="cn.com.validation.action.UserAction" method="registor"> <result name="input">/userRegistor.jsp</result> <result name="success">/result.jsp</result> </action> </package> </struts>

    这个配置文件中的action节点的name属性值为“userRegistor”,对应的Action的名字为“UserAction”,所以xml配置文件的名字为“UserAction-userRegistor-validation.xml”。下边是这个配置文件的代码:

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <field name="age"> <field-validator type="int"> <param name="max">150</param> <param name="min">1</param> <message>Age must between ${min} and ${max}</message> </field-validator> </field> </validators>

    这个文件也放在要验证的Action的包中。xml验证配置文件最重要的就是文件的名字问题以及该文件放置的位置问题。

    至此Struts2中验证的方式已经介绍完了,这里只是简要的介绍了一下struts2中两大类的验证方式,至于验证的细节问题请参考相关的资料。

    最新回复(0)