三.二 validate验证框架的具体详细使用
三.二.一 创建 Xxx.xml 验证文件
在action包下,创建 .xml 配置文件,该配置文件的文件名称 action名-validation.xml。
如UserAction的验证配置文件是UserAction-validation.xml,注意连接符是-,并不是下划线_
该例子用的是 RegisterAction, 那么创建的配置文件名称就是 RegisterAction-validation.xml
三.二.二 配置约束
在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
提示,必须输入id的值。
当我们在前端 get 方式传入id的值后, (注意,传入的是user.id的值)
没有提示任何错误,可以正确的进行跳转到注册的页面了。
当我们输入一些值,但不输入编号时:
点击提交按钮后,
说明,验证框架起作用了,验证了 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是正确的。
如果出错,显示的信息是:
三.三 验证文件所在的位置
在UserAction-validator.xml验证文件中,那些type=“int”,type=“required”,并不是随便写的,而是已经定义好的。它在
Struts2下载目录\Struts2\src\apps\portlet\src\main\resources目录下
该文件,其中内容主要是:
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>中就是那些属性。
四. 为每一个方法写单独验证,
上面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”)
日志也没有输出
在执行toLogin()方法之前,也对user.id,user.name 等属性 进行了相应的验证。
四.一 创建业务性验证
在与要验证的Action同级目录下,创建一个验证文件,命名方式必须是: ActionName-要验证方法名-validation.xml。
故新建一个UserAction-register-validation.xml文件,添加上面的一些验证,原先的UserAction-validation.xml文件保留,但去除验证配置。
重启服务器,进入http://localhost:8090/Struts_validate/User_toLogin.action,发现可以正常进入,会跳转到相应的login.jsp页面,而且日志也可以打印输出。
这样就完成了单个业务验证的处理。
有时候,一个Action中有很多方法,特别是toXXX页面的方法,这个时候就不建议对整个Action进行验证了,而是对每一个方法即业务进行单独的验证。但可能会造成一个Action中的验证文件过多的情况。根据业务需求进行相应的取舍。
即如果是多个方法,可以:
对add,login,register 三个方法进行单独的验证。
五. 验证框架的图像总结
验证顺序:
验证知识点总结
本章节代码链接为:
链接:https://pan.baidu.com/s/1_8Uo0YgGt9DLh1GRum0_uw 提取码:yi71
谢谢您的观看!!!