前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【SSH快速进阶】——Struts2数据校验

【SSH快速进阶】——Struts2数据校验

作者头像
DannyHoo
发布2018-09-13 12:12:28
4530
发布2018-09-13 12:12:28
举报
文章被收录于专栏:Danny的专栏Danny的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337079

  为了保证数据的正确性、规范性、安全性等,每个系统的输入都需要校验:

  Struts2作为优秀的前端框架,就为我们能提供了几种校验数据的方式。

  在了解这几种校验方式之前,建议先了解一下addActionMessage、addActionError、addFieldError这几个方法,可以参考博客:《addActionError,addFieldError,addActionMessage用法 》

  如果您已经熟悉了这几个方法,那么来看struts2为我们提供的数据校验的方式:

1、重写ActionSupport的validate方法


  在继承了ActionSupport的Action中,重写validate方法,在validate方法中对页面传来的数据进行校验:

Action中的validate方法:

代码语言:javascript
复制
    @Override
    public void validate(){
        System.out.println("validate invoked!!");
        if(username==null || username.length()<6 ||username.length()>18){
            this.addFieldError("username","用户名长度必须为6~18位");
        }

        if(password==null || password.length()<6 ||password.length()>18){
            this.addFieldError("password","用户名长度必须为6~18位");
        }

        if(!repassword.equals(password)){
            this.addFieldError("repassword","确认密码错误");
        }
    }

  在这个方法的开始,我先用System.out.println(“validate invoked!!”)打印出了一句此方法初始化的提醒,您可以在execute方法中也打印出一句“execute invoked!!”,运行时就会发现,validate方法是先于execute方法执行的,当在validate中发生验证异常时,就会自动跳过execute方法,默认返回”input”,所以在设置struts.xml时,要添加一个名为“input”的result:

代码语言:javascript
复制
    <struts>
        <package name="struts2" extends="struts-default">       
            <action name="registerAction" class="com.shengsiyuan.struts2.RegisterAction">
            <result name="success">/success.jsp</result>
            <result name="input">/register.jsp</result>
            </action>           
        </package>          
    </struts>

  在register.jsp页面显示校验结果:

代码语言:javascript
复制
    <form action="registerAction">
        <s:fielderror cssStyle="color: red">
        </s:fielderror>  
    用户名:<input type="text" name="username"/>
        <br />
    密码:<input type="text" name="password"/>
        <br />
    确认密码:<input type="text" name="repassword"/>
        <br />
    生日:<input type="text" name="birthdate"/>
        <br />
    </form>

  同理,假如要对action中一个名为myExecute方法中的变量进行验证,需要增加validateMyExecute方法,并在validateMyExecute方法中进行验证操作,规则就是:添加的验证方法的名字为“validate+待验证方法的名字”,执行顺序同validate方法和execute方法一样,验证方法总是先于被验证的方法执行。

2、用struts2自带的标签库进行验证:


  这种方法不需要重写validate方法,后台代码不需要任何操作,只需要在jsp页面采用struts标签库即可:

代码语言:javascript
复制
    <s:form action="registerAction" theme="simple">
        <s:fielderror cssStyle="color: red">
        </s:fielderror> 
    用户名:<s:textfield name="username"></s:textfield>
        <br />
    密码:<s:password name="password"></s:password>
        <br />
    确认密码:<s:password name="repassword"></s:password>
        <br />
    生日:<s:textfield name="birthdate"></s:textfield>
        <br />
        <s:submit name="commit" value="提交" />
        <br />
    </s:form>

  在action中定义的生日字段的类型为Date类型,故意在生日栏中填入“123”,就会提示不合法信息,但是这些信息都是struts封装的:

3、自定义字段级别错误提示消息


  基于第二种方法的提示消息是struts2封装的,我们也可以自定义,方法也特别简单,只需直接在跟action类相同的包下建立与action类相同名称的properties文件,比如我这个对RegisterAction.java这个action类中的字段进行验证,需要新建名为RegisterAction.properties文件,在这个peoperties文件中可以定义每个字段的不合法提示信息:

代码语言:javascript
复制
invalid.fieldvalue.username=username invalid !
invalid.fieldvalue.password=password invalid !
invalid.fieldvalue.birthdate=birthdate invalid !

  这些提示语也可以写成中文,但是写成中文后会自动转换为Unicode编码的格式:比如:

代码语言:javascript
复制
invalid.fieldvalue.username=\u7528\u6237\u540D\u4E0D\u5408\u6CD5\uFF01(用户名不合法!)
invalid.fieldvalue.password=\u5BC6\u7801\u4E0D\u5408\u6CD5\uFF01(密码不合法!)
invalid.fieldvalue.birthdate=\u751F\u65E5\u4E0D\u5408\u6CD5(生日不合法!)

 【 原创不易,转载请注明出处——胡玉洋《【SSH快速进阶】——Hibernate环境搭建》】 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年10月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、重写ActionSupport的validate方法
  • 2、用struts2自带的标签库进行验证:
  • 3、自定义字段级别错误提示消息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档