`
沈冠军
  • 浏览: 110090 次
  • 性别: Icon_minigender_1
  • 来自: 玉林
社区版块
存档分类
最新评论

Struts2学习之表单验证

阅读更多

1、前言

     web应用程序,在很多地方都需要对数据进行验证,验证后,给用户一些提示的信息,尽量让用户知道那些信息有误,对输入信息的认证,可以在前台,也可以在后台,在前台可以用js来实现,在后台呢,也可以,如果要自己学验证方法的话

写是可以写出来,但是很繁琐,都一些if和else语句,基于这种考虑,struts提供了很一套很好的验证体系。

     这个验证功能要用到上一篇编写的代码,只是修改部分代码,和添加必需的代码。

2、strut验证的种类

    strut验证的方式可以说是挺多中的,下面是一些常用的方法。

    (1)在继承ActionSupport的动作类中重写validate()方法,至于如何验证,那就是自己编写代码的事情了,由于

            承了ActionSupport这个类,而这个类中有几个处理动作错误的方法。如下:

            1)addActionError(String anErrorMessage),当动作请求错误时,可以把需要显示给用户的信息添加进去,

                 在前台则采用struts内置的标签<s:actionerror/>就可以把在后台添加进来的信息实现给用户了。

            2)addActionMessage(String aMessage),这个方法可以将需要显示的信息显示给用户,在前台采用标签

                 <s:actionmessage/>来显示相关的信息。

            3)addFieldError(String fieldName,String errorMessage),这个方法是在字段类型输入不正确时候用到,

                 在前台用<s:fielderror/>就可以将我们在后台添加的错误信息显示给用户看了。

    (2)如果表单使用的标签都是struts内置的话,那么当用户输入的数据类型不合法时,在后台无法进行自动转换时,

            它会自动提示给用户Invalid field value for field "fieldName",虽然可以提示,但是总感觉这个提示太过于笼

            统,用户可能也不理解。这很好解决,struts程序员也想到了这点,这时,我们只要编写一个properties文件就

            可以改变显示的内容信息了,它的格式是,名字actionName.properities,这个文件要和对应的动作类在同一个

            目录下,其中的actionName就是动作类的名字,这个文件的内容也有特定的格式,invlid.fieldvalue.字段名

            ="自己想显示的内容",  例如,在前台有个name="age"的输入框,那么就应该写

            invalid.fieldvalue.age="请输入整数类型".

    (3)由于struts内嵌了xwork框架,所以它支持xwork提供的专业的数据验证体系,其实我们需要做的很事情很少

            只需要编写一个xml文件,xwork会自动调用内部的方法为我们验证。命名规则是:ActionName-validation

            .xml,也要把这个文件放到对应的动作类目录下。 

3、用实例来说话,源码和上一篇的博客一样,下面是需要修改的。

     (1)对应上边的第一种方法。

             在RegisteAction类中重写ActionSupport的validate()方法,如下

           

	public void validate(){
		if(username==null||username.length()<6||username.length()>12){
			this.addActionError("用户名无效");
		}
		if(password==null){
			this.addActionError("密码不能为空");
		}
		if(repassword==null){
			this.addActionError("确认密码不能为空");
		}
		if(password!=null&&repassword!=null&&password.equals(repassword)){
			this.addActionError("两次输入的密码不一致");	
		}
		if(birthday!=null&&graduated!=null){
			if(graduated.before(birthday)){
				this.addActionError("毕业日期不能在出生日期之前");
			}
		}
		if(point==null){
			this.addActionError("坐标不能为空,输入的两个数字要以逗号隔开");
		}
		
	}

            在registe2.jsp中输入如下:         
         
 

         提交后,显示如下:

        

     说明:可以看到,在顶部有黑点的提示信息就是在RegisteAction2类中的validate方法中编写的,在前台用了

              <s:actionerror/>标签显示出来,由于这个表单的标签都是采用struts内置的,所以当输入的类型与后

               台不匹配时,它会自动提示错误信息,但是这样的信息用户是很难看懂的。

    (2)对应上边的第二种方法,改变显示的内容,显示一些用户容易看懂的信息。

            创建一个properties文件,文件名为RegistAction.properties,由于采用的编码不一样,所以在可视化界面

            时是如下:
        
           点击源码设计时如下:

invalid.fieldvalue.username=\u7528\u6237\u540D\u4E0D\u53EF\u7528
invalid.fieldvalue.password=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A
invalid.fieldvalue.birthday=\u51FA\u751F\u65E5\u671F\u4E0D\u53EF\u7528\uFF0C\u683C\u5F0F\u5982\uFF1A2011-03-05
invalid.fieldvalue.graduate=\u6BD5\u4E1A\u65E5\u671F\u4E0D\u53EF\u7528\uFF0C\u683C\u5F0F\uFF1A2011-04-05
invalid.fieldvalue.point=\u5750\u6807\u4E0D\u53EF\u7528\uFF0C\u683C\u5F0F\u5982\uFF1A3\uFF0C4

          都是一些我们看不懂的信息,但是没有关系,添加了这个文件后,

          现在再看看效果:     
      
 

           提示的信息确实改变了,这就是RegisteAction.properties文件起到的效果。

    (3) 采用xwork框架内置的验证机制

         RegisteAction-validation.xml文件

        

<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE validators PUBLIC 
  		"-//OpenSymphony Group//XWork Validator 1.0//EN" 
  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">

<validators>
	<field name="username">
		<field-validator type="requiredstring">
			<param name="trim"></param>
			<message>请填写字符类型</message>
		</field-validator>
		<field-validator type="stringlength">
			<param name="maxLength">6</param>
			<param name="minLength">20</param>
			<message>长度在6到20个字符之间</message>
		</field-validator>
		<field-validator type="required">
			<param name=""></param>
			<message>用户名不能为空</message>
		</field-validator>
	</field>
	<field name="birthday">
		<field-validator type="date">
			<param name="min">1900-01-01</param>
			<param name="max">2012-12-12</param>
			<message>出生时间在${min}和${max}之间</message>
		</field-validator>
	</field>
</validators>

 

       说明:这个文件的标签有很多,不可能把它全都背下来,学习得有技巧,我们可以查看xwork类库下的源码,里面有

                很详细的属性,它的位置如下图所示:

               
              
                点击default.xml这个文件,显示的内容如下:

                

 

        说明:这个文件一目了然,name属性对应于ActionName-validation.xml中的

                 <field-validator type="requiredstring">的type值,而<param name="trim"></param>中的

                 name属性从哪里来呢,那就得找到上边对应的类,里面有什么属性,这个name类里面就可以填写什么。

       好了,看看效果吧,在看效果前,我先把自己在RegisteAction中的validate方法中编写的验证方法注释掉。

       效果如下:

            
            一样可以验证,当然xwork还提供了很多类型数据的验证,比如邮件,url等的验证,如果要我们自己编写的话,

             考虑的可能不是很周到,但是利用内置的验证,则可以很好得给用户提示信息。

4、小结一下:

      strut的验证方法有很多,也很全面,各种验证方法可以同时存在,在适当的时候适当的地方选择适当的验证才是最好

的方法。
    
       

 

 

  • 大小: 3.4 KB
  • 大小: 10.7 KB
  • 大小: 3.7 KB
  • 大小: 10.6 KB
  • 大小: 12.8 KB
  • 大小: 35.4 KB
  • 大小: 8.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics