Struts2利用验证框架实现数据验证(十一)下

简介: Struts2利用验证框架实现数据验证(十一)

三.二 validate验证框架的具体详细使用


三.二.一 创建 Xxx.xml 验证文件


在action包下,创建 .xml 配置文件,该配置文件的文件名称 action名-validation.xml。


如UserAction的验证配置文件是UserAction-validation.xml,注意连接符是-,并不是下划线_


该例子用的是 RegisterAction, 那么创建的配置文件名称就是 RegisterAction-validation.xml


20200419142305781.png


三.二.二 配置约束


在UserAction-validation.xml中引入相关的约束


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
  <!-- 里面写具体的验证描述 -->
</validators>


三.二.三 添加id 的约束


<!-- field中的name指定的是要验证的哪一个属性-->
<field name="user.id"> 
    <!-- field-validator 中type指定类型 -->
    <field-validator type="required"> 
      <!-- message指定错误的信息 -->
      <message>必须存在id</message> 
    </field-validator>
</field>


三.二.四 重启服务器,验证


重启服务器,发现出错了。


再次输入网址: http://localhost:8080/Struts_Validate/Register_toRegister


20200419142317203.png


提示,必须输入id的值。


当我们在前端 get 方式传入id的值后, (注意,传入的是user.id的值)


20200419142324881.png


没有提示任何错误,可以正确的进行跳转到注册的页面了。


当我们输入一些值,但不输入编号时:


20200419142344518.png


点击提交按钮后,


20200419142338706.png

说明,验证框架起作用了,验证了 id不能为空。


三.二.五 验证 user.name的类型


配置user.userName 必须是字符串类型,且不能为空


在RegisterAction-validation.xml 中配置user.userName的验证


<!-- 配置user.userName的类型 -->
   <field name="user.userName">
    <field-validator type="requiredstring">
      <message>用户名不能为空,且必须是字母类型</message>
    </field-validator>
</field>


重启服务器,进行测试,验证框架也同样起作用(这儿就不贴图了)


三.二.六 验证user.password


必须是字符串类型,且有长度限制。


在RegisterAction-validation.xml 中配置user.password 的验证


    <field name="user.password">
    <field-validator type="requiredstring">
      <message>密码不能为空</message>
    </field-validator>
    <!-- 多添加一个验证 -->
    <field-validator type="stringlength">
      <!-- 去除两边的空格 -->
      <param name="trim">true</param>
      <!-- 设置最小和最大的长度, 注意是大写Length -->
      <param name="minLength">6</param>
      <param name="maxLength">15</param>
      <!-- 设置显示的信息  可以用ognl表达式来显示-->
      <message>密码的长度应该在${minLength}~${maxLength}之间</message>
    </field-validator>
  </field>


可以在一个字段中,添加多个验证。 注意参数trim,maxLength,minLength的写法。


验证长度用type=“stringlength” 这里是小写。


三.二.七 配置确认密码与user.password密码值一样


常用于字段表达式


前端jsp 设置:


 <s:textfield label="密码" name="user.password"></s:textfield>
 <s:textfield label="确认密码" name="repassword"></s:textfield>


在RegisterAction-validation.xml 中配置repassword 的验证


<field name="repassword">
    <field-validator type="fieldexpression" short-circuit="true">
      <param name="trim">true</param>
      <param name="expression"><![CDATA[(#parameters.password[0] == #parameters.repassword[0])]]></param>
      <message>确认密码必须与原先密码相同</message>
    </field-validator>
</field>


这个时候,才算是达到了要达到的效果。


三.二.八 配置真实姓名的中文验证


必须是2~4个中文,用regex类型,演示正则表达式


<field name="user.name">
    <field-validator type="regex">
      <!-- 记住中文的验证规则 -->
      <param name="regexExpression"><![CDATA[([\u4E00-\u9FA5]{2,4})]]></param>
      <message>必须是两个汉字~四个汉字</message>
    </field-validator>
  </field>


三.二.九 对age的int类型配置


需要指定其最大和最小值 用int


<field name="user.age">
    <field-validator type="int">
      <!-- 最小值和最大值 min,max-->
      <param name="min">18</param>
      <param name="max">58</param>
      <message>注册年龄必须在${min}~${max}岁之间</message>
    </field-validator>
  </field>


三.二.十 对money的double类型配置


用double类型


<field name="user.money">
    <field-validator type="double">
      <message>金钱必须是小数</message>
    </field-validator>
  </field>


输入整数或者浮点数是可以通过,但是输入字母是出错的。 另

外,输入1.2d,或者1.2f是正确的。


如果出错,显示的信息是:


20200609120029862.png


三.三 验证文件所在的位置


在UserAction-validator.xml验证文件中,那些type=“int”,type=“required”,并不是随便写的,而是已经定义好的。它在


Struts2下载目录\Struts2\src\apps\portlet\src\main\resources目录下


20200609120043218.png


该文件,其中内容主要是:


validators.xml文件:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator Config 1.0//EN"
        "http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd">
<validators>
    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
</validators>


可以点击进入查看源代码,其中<param></param>中就是那些属性。


20200609120058478.png


四. 为每一个方法写单独验证,


上面t每一个Action写了一个xml验证文件,这个是相对于整个Action来说的。


即这个Action中的每一个方法,都会进行这些统一的验证。


做一个简单的小例子。


在UserAction中添加一个转到登录的方法,在Action 写入方法,


public String toLogin(){
    logger.info("跳转到登录的页面");
    return "toLogin";
  }


其相应的 struts.xml 配置文件 :


<result name="toLogin">/login.jsp</result>


访问toLogin方法时: http://localhost:8090/Struts_validate/User_toLogin.action

会跳转到注册的页面,(跳转到注册页面是因为出错了,配置了result 中name=“input”)


日志也没有输出


20200609120113711.png


在执行toLogin()方法之前,也对user.id,user.name 等属性 进行了相应的验证。


四.一 创建业务性验证


在与要验证的Action同级目录下,创建一个验证文件,命名方式必须是: ActionName-要验证方法名-validation.xml。


故新建一个UserAction-register-validation.xml文件,添加上面的一些验证,原先的UserAction-validation.xml文件保留,但去除验证配置。


202006091201250.png


重启服务器,进入http://localhost:8090/Struts_validate/User_toLogin.action,发现可以正常进入,会跳转到相应的login.jsp页面,而且日志也可以打印输出。


20200609120138409.png


这样就完成了单个业务验证的处理。


有时候,一个Action中有很多方法,特别是toXXX页面的方法,这个时候就不建议对整个Action进行验证了,而是对每一个方法即业务进行单独的验证。但可能会造成一个Action中的验证文件过多的情况。根据业务需求进行相应的取舍。


即如果是多个方法,可以:


2020060912015163.png


对add,login,register 三个方法进行单独的验证。


五. 验证框架的图像总结


验证顺序:


20200609120202271.png


验证知识点总结


202006091202223.png


本章节代码链接为:


链接:https://pan.baidu.com/s/1_8Uo0YgGt9DLh1GRum0_uw 
提取码:yi71 


谢谢您的观看!!!

相关文章
|
XML Java API
SpringMVC进阶-校验框架
SpringMVC进阶-校验框架
69 0
|
编解码 前端开发 Java
springMVC--数据验证以及国际化
springMVC--数据验证以及国际化
126 0
|
XML Java Apache
验证框架 | 学习笔记
快速学习验证框架,介绍了验证框架系统机制, 以及在实际应用过程中如何使用。
|
前端开发 JavaScript 数据安全/隐私保护
Struts2利用验证框架实现数据验证(十一)上
Struts2利用验证框架实现数据验证(十一)
188 0
Struts2利用验证框架实现数据验证(十一)上
|
XML 前端开发 数据安全/隐私保护
Struts2利用验证框架实现数据验证(十一)中
Struts2利用验证框架实现数据验证(十一)
168 0
Struts2利用验证框架实现数据验证(十一)中
|
前端开发 Java 数据库连接
SpringMVC的数据验证和JSR 303国际化显示(十一)中
SpringMVC的数据验证和JSR 303国际化显示(十一)中
215 0
SpringMVC的数据验证和JSR 303国际化显示(十一)中
|
前端开发 Java 数据库连接
SpringMVC的数据验证和JSR 303国际化显示(十一)下
SpringMVC的数据验证和JSR 303国际化显示(十一)下
377 0
SpringMVC的数据验证和JSR 303国际化显示(十一)下
|
前端开发 JavaScript Java
SpringMVC的数据验证和JSR 303国际化显示(十一)上
SpringMVC的数据验证和JSR 303国际化显示(十一)上
222 0
SpringMVC的数据验证和JSR 303国际化显示(十一)上
|
JavaScript Java 开发者
验证框架|学习笔记
快速学习验证框架
|
数据安全/隐私保护
14 Struts2 验证框架
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxdeng/article/details/82020359 数据校验 数据校验是程序中最常见的模块。
1345 0