数据验证
验证的方式:
客户端验证:javascript
服务端验证:逻辑验证(我们的代码)
注意:如果客户端和服务端二选一的话,服务器端的不能省。
实际开发中:客户端+服务端
struts2的服务端数据的验证分为两种:
1.编程式验证
动作类继承ActionSupport
在动作类中覆盖 public void validate()方法
这个方法会验证左右的动作方法 解决方法:
1.给不需要验证的动作方法添加一个@SkipValidation注解
2.validate+要验证的动作方法名称 如:validateRegist(),只验证regist()方法
但是,这种方法不推荐,因为这是硬编码.
2.声明式验证(推荐)
通过编写验证规则的xml文件.需要验证时编写xml文件,不需要验证时,不编写.
1.针对动作类中的所有动作进行验证:在动作类所在的包中,建立一个ActionClassName-validation.xml的文件:
UserAction-validation.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<!-- 基于字段的声明式验证 -->
<!-- field中的name属性指定的是表单name属性的取值 -->
<field name="username">
<!-- struts2框架为我们集成了很多的内置验证器.requiredstring会验证输入内容是否为空,
是否为空字符串.并且去掉左右空格 -->
<field-validator type="requiredstring">
<message>请填写用户名</message>
</field-validator>
</field>
</validators>
2.针对动作类中的某个动作进行验证:在动作类所在的包中建立一个xml文件,名称为ActionClassName-ActionName-validation.xml的文件:
如:ActionClassName-regist-validation.xml
注意:这里的ActionName为配置文件中的action标签的name属性的值,不是动作方法的名称
上面是基于字段的声明式验证,struts2有内置的常用声明式验证器
位置: xwork-core-2.3.15.3.jar\com\opensymphony\xwork2\validator\validator\default.xml
例如:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<!-- 基于验证器的验证 -->
<validator type="requiredstring">
<!-- 以注入的方式,提供要验证的字段信息
setFieldName("password");
-->
<param name="fieldName">password</param>
<message>密码必须输入</message>
</validator>
</validators>