现在的位置: 首页 > 综合 > 正文

struts2 使用validate()验证单个方法

2017年10月24日 ⁄ 综合 ⁄ 共 6794字 ⁄ 字号 评论关闭

一、为什么要使用struts2的validate验证框架

:使用struts2的验证框架,能够提高客户端提交的数据的安全性。通过验证,确保保存进数据库的信息是正确的

二、使用struts2的validate框架?

: 1.我们需要配置struts2项目的最基本的jar包。(validate验证框架是有"xwork-core"包提供的)

: 2.使用struts2自带的validate验证有两种方法

 

a):使用代码实现 验证功能 (也就是重写ActionSupport中的validate()方法) 在validate方法中进行编写我们需

要的验证功能 这里需要提几点的就是:

1.当我们需要对action中的某一个指定的方法使用validate()方法验证时我们需要自定义一个validate

2.当我们使用自定义的validate方法时,最好将重写的ActionSupport的validate方法去掉 (这是为了避免

引起冲突,因为如果action类中存在重写的validate()方法 程序会自动调用我们自定义的validate方法 之

后再调用它 这样就验证了多次,非常不利于程序的效率。而且容易出现冲突)

3.在创建自定义的validate方法时需要注意该方法的 方法名! 该方法名由 validate+对应的表单提交的

action中的 执行方法名称(首字母大写)

附上一段代码:

struts.xml:  
<action name="*/*" class="*" method="test">  
      //这里的method指定action对象调用哪一个方法执行  
            //..此处省略  
</action>  
                          
对应的action类中的片段:  
public String test(){//action操作的方法  
        //..此处省略  
    return "";  
    }    
                              
public void validateTest()  
            //这是我们自定义的validate方法 (validateTest) 这便是方法名  
{             //一定要记住大写test的首字母  
        //..此处省略  
}  
                              
@override  
Public String execute()//这是重写ActionSupport的方法  
    {  
        //..此处省略  
        return "";  
}  
                              
@override  
public void validate()//这是重写ActionSupport的方法  如果我们需要有  
       //execute方法并且还要对它接收的数据信息进行验证  
{  
        //那么我们可以将方法名改成 valiateExecute()便可以了  
//..此处省略  
      }  

         b):使用xml文件进行配置验证功能(建议使用xml配置文件进行validate的验证)

 

   : 1.需要使用到xwork-core包下的  xwork-validate.dtd(版本根据项目进行选择,不过大体相同)

: 2.关于使用Xml进行验证 的两种情况: 全局验证 和局部验证

a):关于全局验证

全局就是针对整个action对象进行xml验证

当我们使用全局验证时候需要在  action对象的同目录下创建一个xml配置文件

文件名是由 : action对象的名称+(-validation.xml)

b):关于局部验证

局部验证是针对action对象中的某一个方法进行xml验证

使用局部验证的时候同样要在 action对象的同目录下创建一个xml配置文件

不过使用局部验证需要在struts.xml 中进行配置

代码如下:(struts.xml)

<constant name="struts.enable.DynamicMethodInvocation" value="false" />  
  
<package name="struts2" extends="struts-default">  
                //这一个<action>主要针对整个action对象  
    <action name="register"class="org.viancent.action.RegisterAction">  
        <result name="success">/show.jsp</result>  
        <result name="input"> /register.jsp</result>  
    </action>  
    //这个<action>主要针对action的某一个方法 (采用了通配符 * 与 {1} 的值是相同的)  
        <action name="register_*" class="org.viancent.action.RegisterAction"method="{1}">  
        <result name="success">/show.jsp</result>  
        <result name="input"> /register.jsp</result>  
    </action>  
</package>  

  //如果我们需要访问action类中的test方法 则表单上可以这样写 <s:action="register_test">

所以该validate框架的xml配置文件名就是:action对象名+(-register_test-validation.properties)

 

:3.使用struts2的validate框架有两种验证类型

a):在服务端进行验证。
b):在客户端进行验证。
: 1.如果需要使用validate框架在客户端进行验证的话,一定要使用 struts2 的s标签
并且<s:form> 表单的theme不能为:simple
下面给出一个实例:  
    action对象:  
   package org.viancent.action;  
    import java.util.Date;  
    import com.opensymphony.xwork2.ActionSupport;  
  
    public class RegisterAction extends ActionSupport {  
        private String username;  
        private String password;  
        private String repassword;  
        private int age;  
        private Date birthday;  
  
        private String users;  
        public String getUsers() {  
            return users;  
        }  
  
        public void setUsers(String users) {  
            this.users = users;  
        }  
  
        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 getRepassword() {  
            return repassword;  
        }  
  
        public void setRepassword(String repassword) {  
            this.repassword = repassword;  
        }  
  
        public int getAge() {  
            return age;  
        }  
  
        public void setAge(int age) {  
            this.age = age;  
        }  
  
        public Date getBirthday() {  
            return birthday;  
        }  
  
        public void setBirthday(Date birthday) {  
            this.birthday = birthday;  
        }  
  
        @Override  
        public String execute() throws Exception {  
            // TODO Auto-generated method stub  
            return super.execute();  
        }  
  
        // 自定义的执行方法  
        public String test() throws Exception {  
            System.out.println("test method invoked!");  
            // TODO Auto-generated method stub  
            return super.execute();  
        }  
  
        // 自定义的校验方法  
        public void validateTest() {  
            System.out.println("validateTest method invoked!");  
        }  
  
         @Override  
        public void validate() {  
        System.out.println("validate method invoked!");  
         if (null == this.getPassword()  
        || "".equals(this.getPassword()) || null ==   
                this.getRepassword()  
         || "".equals(this.getRepassword())) {  
         return;  
            }  
  
         if (!this.getPassword().equals(this.getRepassword())) {  
         this.addFieldError("repassword",  
         "repassword should be same password");  
         }  
         }  
    }  

 struts.xml的信息:

<struts>  
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />  
  
<package name="struts2" extends="struts-default">  
<action name="register" class="org.viancent.action.RegisterAction">  
    <result name="success">/show.jsp</result>  
    <result name="input"> /register.jsp</result>  
</action>  
<action name="register_*" class="org.viancent.action.RegisterAction"  
                        method="{1}">  
    <result name="success">/show.jsp</result>  
    <result name="input"> /register.jsp</result>  
</action>  
</package>              
</struts>  

 局部validate框架的xml配置信息(RegisterAction-register_test-validation.xml)

<validators>  
      
    <field name="username"> //指明是对哪一个属性进行验证  
         <field-validator type="requiredstring"> //验证的类型  
         <param name="trim">true</param>  
         <message>username should be notblank!</message>  
              //如果错误显示给客户端的信息  
    </field-validator>  
    <field-validator type="stringlength">  
        <param name="minLength">6</param>  
        <param name="maxLength">10</param>  
        <message>username should be not between${minLength} and ${maxLength}</message>  
    </field-validator>  
    </field>  
  
    <field name="age">  
        <field-validator type="required">  
        <message>age should be not blank!</message>  
        </field-validator>  
  
        <field-validator type="int">  
        <param name="min">1</param>  
        <param name="max">150</param>  
        <message>age should be between ${min} and ${max}</message>  
        </field-validator>  
    </field>  
  
    <field name="birthday">  
        <field-validator type="required">  
        <message>birthday should be not blank!</message>  
        </field-validator>  
  
        <field-validator type="date">  
        <param name="min">1990-10-10</param>  
        <param name="max">2011-3-14</param>  
        <message>birthday should be between ${min} and ${max} </message>  
                </field-validator>  
    </field>  
</validators>  

局validate框架的xml配置信息(RegisterAction-validation.xml)

<validators>  
        <field name="users">  
            <field-validator type="requiredstring">  
            <message>users should be not blank!</message>  
            </field-validator>  
  
            <field-validator type="stringlength">  
            <param name="minLength">6</param>  
            <param name="maxLength">10</param>  
            <message>users should be between ${minLength} and ${maxLength}</message>  
               </field-validator>  
        </field>  
</validators>  

 view 界面的jsp信息: 

    register.jsp:  
                  
    <body style="text-align: center">  
        <s:form action="register_test">//服务端验证  
        <s:textfield name="username" id="username" label="username"></s:textfield>  
        <s:password name="password" id="password" label="password"></s:password>  
        <s:password name="repassword" id="repassword" label="repassword"></s:password>  
        <s:textfield name="age" id="age" label="age"></s:textfield>  
        <s:textfield name="birthday" id="birthday" label="birthday"></s:textfield>  
        <s:submit></s:submit>  
        <s:reset></s:reset>  
</s:form>  
  
        <s:form action="register" validate="true">//客户端验证  validate="true"(关键点)  
        <s:textfield name="users" label="users" id="users"></s:textfield>  
        <s:submit></s:submit>  
        </s:form>  
    </body>  

 show.jsp:

<body>  
    <s:property value="username"/>  
    <s:property value="password"/>  
    <s:property value="age"/>  
    <s:property value="birthday"/>  
    <s:property value="users"/>  
</body>  

 这里说明一下 validate xml验证的规则

<field name=""></field>  //自动校验器
<validator type=""></validator>
//非自动校验器
验证规则:
requiredstring  验证是属性是否为("")   不需要设置参数
required   
验证是属性是否为(null) 不需要设置参数
int   验证属性是否为整数 可以这是在什么数之间 需要参数 (min,max)
stringlength     验证字符串的长度   可以设置字符串需要的长度 需要参数(minLength,maxLength)
date 验证对象是否在某时段  可以设置时间段 需要参数(min,max)
regex 使用正则验证
其他具体可以参看xwork-core包中的com.opensymphony.xwork2.validator.validators 下面的类以及
xwork-default.xml

抱歉!评论已关闭.