Struts2对表单提交数据的验证
2016-10-20 22:29
435 查看
对表单数据的验证,分为
客户端验证。服务器端验证。
我们要看的呢,就是服务器端验证:
1:编程式验证:写代码验证,写死了,硬编码
2:声明式验证:写xml文件验证
编程式验证
编程式验证:重写ActionSupport中的public void validate()方法
Struts2内部封装了一个Map,Map的键就是表单上的name的值
Map的值就是错误信息
注意:动作类必须继承ActionSupport
这样,当我们提交表单时,若username为空的话,就会在表单上得到回显的错误信息。
但是这种方法有问题:
默认:validate()方法在所有动作方法之前执行
那么就算去执行其他的action,这里还是会执行validate方法进行验证
为了让不需要验证不去执行 validate方法,解决方式有两种:
1:使用注解:@SkipValidation
2: 验证的方法名:validate+动作方法名( 首字母要大写)
对于这两种方法:
简单看一下代码
也就是下面的两种设置方法。
声明式验证
对于编程式验证,代码是写死的,我们一半会用更灵活的声明式验证。
声明式验证:通过xml文件实现验证
在动作类所在的包下创建xml文件
文件名有命名规则:动作类名-vlidation.xml,默认验证动作类中的所有动作方法
希望某些方法不被验证:1.加注解 @SkipValidation
2.xml文件名改成 动作类名-动作名-vlidation.xml *
在xml文件中加入dtd约束:在xwork-core.jar包中找到xwork-validator-1.0.3.dtd
下面看我们配置的UserAction-regist-validation.xml文件
这样就完成了对username和password非空的验证。
![](http://img.blog.csdn.net/20161020222345293)
为了对声明式验证更多点了解,我们看一个对验证注册信息的xml文件。
客户端验证。服务器端验证。
我们要看的呢,就是服务器端验证:
1:编程式验证:写代码验证,写死了,硬编码
2:声明式验证:写xml文件验证
编程式验证
编程式验证:重写ActionSupport中的public void validate()方法
Struts2内部封装了一个Map,Map的键就是表单上的name的值
Map的值就是错误信息
注意:动作类必须继承ActionSupport
public class UserAction extends ActionSupport implements ModelDriven<User> { private User user = new User(); private UserService userService = new UserServiceImpl(); @Override public void validate() { //验证用户名不能为空 //"".equals(user.getUsername().trim()) || user.getUsername()==null if(StringUtils.isEmpty(user.getUsername())){ addFieldError("username", "用户名不能为空"); } } public String regist() { //判断用户是否存在 User hu = userService.findUserByUserName(user.getUsername()); if(hu!=null){ return "exists"; } //把用户添加到数据库 int result = userService.regist(user); if(result>0) return "success"; return null; } @Override public User getModel() { return user; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
这样,当我们提交表单时,若username为空的话,就会在表单上得到回显的错误信息。
但是这种方法有问题:
默认:validate()方法在所有动作方法之前执行
那么就算去执行其他的action,这里还是会执行validate方法进行验证
为了让不需要验证不去执行 validate方法,解决方式有两种:
1:使用注解:@SkipValidation
2: 验证的方法名:validate+动作方法名( 首字母要大写)
对于这两种方法:
第一种,在动作类的其它方法上加@SkipValidation标签,那么这个方法就会跳过验证。 第二种方法,在需要验证的方法,将其方法名修改,这样,验证时就只验证该动作方法。
简单看一下代码
也就是下面的两种设置方法。
public void validateRegist() { //验证用户名不能为空 //"".equals(user.getUsername().trim()) || user.getUsername()==null if(StringUtils.isEmpty(user.getUsername())){ addFieldError("username", "用户名不能为空"); } } @SkipValidation public String show() { return "success"; }
声明式验证
对于编程式验证,代码是写死的,我们一半会用更灵活的声明式验证。
声明式验证:通过xml文件实现验证
在动作类所在的包下创建xml文件
文件名有命名规则:动作类名-vlidation.xml,默认验证动作类中的所有动作方法
希望某些方法不被验证:1.加注解 @SkipValidation
2.xml文件名改成 动作类名-动作名-vlidation.xml *
在xml文件中加入dtd约束:在xwork-core.jar包中找到xwork-validator-1.0.3.dtd
下面看我们配置的UserAction-regist-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="username"> <!-- 怎么验证 , struts内部已经定义了很多的验证器 requiredstring判断是否为null,或空字符串,去除空格 --> <field-validator type="requiredstring"> <message>用户名不能为空</message><!-- --> </field-validator> </field> <!-- 基于验证器的验证 --> <validator type="requiredstring"> <!-- 使用注入的方式指明验证谁 private String actionName; setActionName("action1"); 验证器的位置:xwork-core-2.3.15.3.jar\com\opensymphony\xwork2\validator\validators --> <param name="fieldName">password</param> <message>密码不能为空</message> </validator> </validators>
这样就完成了对username和password非空的验证。
为了对声明式验证更多点了解,我们看一个对验证注册信息的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="username"> <field-validator type="requiredstring"> <message>用户名不能为空</message> </field-validator> </field> <field name="age"> <field-validator type="int"> <param name="min">18</param> <param name="max">70</param> <message>年齡必須在18到70之間</message> </field-validator> </field> <field name="email"> <field-validator type="email"> <message>邮箱格式不正确</message> </field-validator> </field> <field name="password"> <field-validator type="requiredstring"> <param name="trim">false</param> <message>密码不能为空</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">3</param> <param name="maxLength">8</param> <message>密码长度必须在3--8位之间</message> </field-validator> </field> <!-- 确认密码需要和密码一致,所以使用验证器验证 --> <validator type="expression"> <param name="expression"> <![CDATA[ password==repassword ]]> </param> <message>确认密码要和密码一致</message> </validator> <field name="score"> <field-validator type="regex"> <param name="regex"> \d+ </param> <message>成绩必须是正整数</message> </field-validator> </field> <field name="url"> <field-validator type="url"> <message>输入正确的url地址</message> </field-validator> </field> <field name="gender"> <field-validator type="required"> <message>请选择性别</message> </field-validator> </field> </validators>
相关文章推荐
- Struts2表单验证、模型驱动、防重复提交、数据回显笔记整理
- Struts2表单验证、模型驱动、防重复提交、数据回显笔记整理 文章标题
- Struts2(二)---将页面表单中的数据提交给Action
- struts2 国际化,防止刷新重复提交表单与邮箱格式验证
- JavaScript验证表单数据,并提交给Java后台
- struts2表单数据验证
- Struts2表单验证提交报错
- php基础教程——表单验证(必填、提交后数据保留)
- php表单提交数据的验证处理(防SQL注入和XSS攻击等)
- Struts2(二)---将页面表单中的数据提交给Action
- 基于JavaScript实现带数据验证和复选框的表单提交
- Struts2 Day 05 : 运行流程、自定义拦截器、上传下载、表单重复提交、输入验证
- 运用Struts2数据验证实现注册表单验证
- vue组件表单数据回显验证及提交的实例代码
- struts2中form只提交数据不跳转引发的刷新后重复提交表单中数据的问题
- 【JavaEE笔记】Struts2 (二) 结果页面配置 、获取表单提交数据 、提供获取表单数据方式 、获取数据封装到集合中
- 不用struts2的token机制,手动防止表单数据重复提交
- 不用struts2的token机制,手动防止表单数据重复提交
- 使用struts2拦截器实现防止表单数据重复提交
- Struts2(二)---将页面表单中的数据提交给Action