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

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

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

19.png



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


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


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



#1、重写ActionSupport的validate方法


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

Action中的validate方法:


    @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:


    <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页面显示校验结果:


    <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标签库即可:

  <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封装的:


20.png

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


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


invalid.fieldvalue.username=username invalid !
invalid.fieldvalue.password=password invalid !
invalid.fieldvalue.birthdate=birthdate invalid !


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

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环境搭建》

相关文章
|
7月前
|
存储 Java 应用服务中间件
SSH开发模式——Struts2进阶
SSH开发模式——Struts2进阶
|
10月前
|
前端开发 Java 网络安全
《SSH框架》Struts2
Struts(金属支架),在程序中表示起支撑作用的通用程序代码,Struts2是在Struts1框架的基础上融合了WebWork优秀框架升级得到的。
|
缓存 Java 网络安全
SSH开发模式——Struts2(第三小节)
SSH开发模式——Struts2(第三小节)
74 0
|
开发框架 网络安全
SSH开发模式——Struts2(第二小节)
SSH开发模式——Struts2(第二小节)
103 0
|
前端开发 Java 数据库连接
SSH开发模式——Struts2(第一小节)
SSH开发模式——Struts2(第一小节)
141 0
SSH开发模式——Struts2(第一小节)
|
监控 Java 网络安全
【SSH快速进阶】——Spring AOP原理及其实现
  上篇文章简单总结了一下静态代理以及JDK和Cglib两种方式实现的动态代理。由此也延伸出了一个重要的编程思想:AOP。
【SSH快速进阶】——Spring AOP原理及其实现
|
Java 网络安全 Spring
【SSH快速进阶】——Spring抽象公共配置
  在设计类的时候,往往把多个类公共的部分抽象出来,做成父类,其余的类继承它。   Spring的配置文件也一样,当多个bean有公共部分时,为了减少配置量,也可以把公共的部分抽出来,其余的部分都“继承”它。
|
Java 网络安全 容器
【SSH快速进阶】——Spring属性注入
  上篇介绍了Spring IOC容器管理Bean的几种方式,IOC容器会帮助我们管理配置好的Bean及其之间的依赖关系。
|
Oracle Java 关系型数据库
【SSH快速进阶】——Spring IOC容器注入的几种方式
  **IOC(Inversion of Control)**:控制反转,怎么理解这句话呢?看一个例子就明白了。   一个操作用户的Dao层接口UserDao :
|
存储 Java 数据库连接
【SSH快速进阶】——Hibernate继承映射:每个具体类映射一张表
  上篇文章说的是每个类映射一张表,不管是父类还是子类。与上篇文章不同的是,这里是每个“具体类”映射一张表,什么意思呢?就是让每个子类(具体的、有意义的类)映射一张表。
【SSH快速进阶】——Hibernate继承映射:每个具体类映射一张表