struts2表单错误处理和数据验证
来源:互联网 发布:mysql配置文件my.ini 编辑:程序博客网 时间:2024/05/21 17:08
在前两个当中我们知道了,当数据类型不符合的时候可以进行数据类型的转化,但是,我们并不能对所有的错误都进行转化解决,所有需要处理错误,当我们不进行处理的时候就需要进行表单的错误处理。
当类型转换失败,如何进入input所示的视图又是一个拦截器ActionSupport做的,注意动作类必须先继承actionsupport
在action当中配置错误处理:input
<result name="input">/register.jsp</result>
但出现错误的时候就跳转回register.jsp,但是这么做没有错误的提示,需要错误的提示就需要用到struts2的标签库,同时,表单的写法改为如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%--导入struts2的标签库 --%><%@ taglib uri="/struts-tags" prefix="s" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>My JSP 'register.jsp' starting page</title> </head> <body> <s:actionerror/><!-- 错误动作 --> <s:head></s:head> <s:fielderror/> <s:form action="register.action"> <s:textfield name="username" label="用户名" requiredLabel="true" requiredPosition="left"/> <s:password name="password" label="密码" showPassword="true"/> <s:textfield name="birthday" label="生日"/> <s:submit value="注册"/> </s:form> </body></html>
然后当我们没有填写birthday的时候就会提示如下
注意,要显示中文,需要在javabean目录当中创建一个与类的名字一样的javabean中的名字properties
数据验证有编程式验证和声明方式的验证
一、编程式验证
我们的所有action都需要继承ActionSupport,ActionSupport中有一个方法
public void validate()
是用来验证的,但是这个方法会对action当中所有的操作例如register(),findall()方法都进行验证,这个明显是不行的,所有就有了两种解决办法,同时在struts2的框架中,它也提供了一个Map<表单的字段名,错误提示>,我们需要做的就是往map中存放错误信息,然后struts2会转到input所指向的位置去显示错误。
1、使用@SkipValidation的注解
当我不需要对findall()进行验证的时候直接使用注解。就不会对这个方法进行验证
@SkipValidation public String findAll(){ return SUCCESS; }
2、定义验证方法的名称:validate+动作名称 动作名称的首字符还要大写
不在重写validate()方法,而是编写validate+动作名称的方法,这样的方法都会执行验证:
public void validateRegister() { if(StringUtils.isEmpty(user.getUsername())){ addFieldError("username", "请输入用户名"); } }
使用:当需要验证的方方法多的时候使用注解,少就使用定义验证。但是有一个弊端,就是这是硬编码
二、声明方式的验证
声明方式的验证也有两种,一种是基于字段的声明式验证,一种是基于验证器的声明式验证
1、基于字段的声明式验证
- ActionClassName-validation.xm
在UserAction目录下面创建一个UserAction-validation.xml,使用ActionClassName-validation.xm来命名文件时,她是一个动作类验证器,会验证动作类中的所有动作方法
<?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"> <!-- 使用ActionClassName-validation.xm来命名文件时,她是一个动作类验证器,会验证动作类中的所有动作方法 --> <validators> <!-- 基于字段的声明式验证 --> <!-- field中name属性指定的是表单name属性的取值 --> <field name="username"> <!-- struts2框架为我们集成了很多的内置验证器。requiredstring会验证输入内容是否为空,是否为空字符串。并且去掉左右空格--> <field-validator type="requiredstring"> <message>没有用户名字</message> </field-validator> </field> </validators>
因为会验证所有的方法,所有使用这种方式也需要把不需要验证的方法进行注解
2、ActionClassName-ActionName-validation.xml
当使用ActionClassName-ActionName-validation.xml来命名文件时,它是一个指定动作方法的验证器。只会验证指定的动作方法
他也有两种方式: 基于字段的声明式验证 和基于验证器的验证,他们都只正对特定的动作方法,这里的动作方法是配置文件中< action >当中的name
<?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"><!-- 当使用ActionClassName-ActionName-validation.xml来命名文件时,它是一个指定动作方法的验证器。只会验证指定的动作方法 --><validators> <!-- 基于字段的声明式验证 --> <!-- field中name属性指定的是表单name属性的取值 --> <field name="username"> <!-- struts2框架为我们集成了很多的内置验证器。requiredstring会验证输入内容是否为空,是否为空字符串。并且去掉左右空格--> <field-validator type="requiredstring"> <message>用户名必须存在</message> </field-validator> </field> <!-- 基于验证器的验证 --> <validator type="requiredstring"> <!-- 以注入的方式,提供要验证的字段信息 setFieldName("password"); --> <param name="fieldName">password</param> <message>密码必须输入</message> </validator></validators>
案例
package com.zeroyoung.domain;public class Student { private String username;//不能为null,和空字符串,要去到左右两边的空格 private int age;//整数,介于18-100之间 private String eamil;//按照格式输入 private String password;//长度为3-8 private String repassword;//两次密码必须保持一致 private int score;//必须是数组 private String url;//必须符合url的格式 private String gender;//性别 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEamil() { return eamil; } public void setEamil(String eamil) { this.eamil = eamil; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getRepassword() { return repassword; } public void setRepassword(String repassword) { this.repassword = repassword; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; }}
<?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"><!-- 当使用ActionClassName-ActionName-validation.xml来命名文件时,它是一个指定动作方法的验证器。只会验证指定的动作方法 --><validators> <!-- 基于字段的声明式验证 --> <!-- field中name属性指定的是表单name属性的取值 --> <field name="username"> <!-- struts2框架为我们集成了很多的内置验证器。requiredstring会验证输入内容是否为空,是否为空字符串。并且去掉左右空格--> <field-validator type="requiredstring"> <message>用户名必须存在</message> </field-validator> </field> <!-- 基于验证器的验证 --> <validator type="requiredstring"> <!-- 以注入的方式,提供要验证的字段信息 setFieldName("password"); --> <param name="fieldName">password</param> <message>密码必须输入</message> </validator></validators>
- struts2表单错误处理和数据验证
- Struts2表单数据验证
- struts2表单数据验证
- Struts2处理表单数据
- Struts2的表单数据验证
- struts2标签和表单验证
- Struts2下处理表单数据
- Struts2对表单提交数据的验证
- Struts2-利用数据验证框架进行表单验证
- 运用Struts2数据验证实现注册表单验证
- django表单处理(二)--数据验证
- Struts2国际化和数据验证
- struts2标签 表单验证错误,再次提交不能进入action
- struts2的表单验证 ,消息处理学习笔记
- Struts 验证 Struts2 表单
- Struts2 表单验证
- Struts2表单验证
- struts2表单验证
- 无缝滚动的实现
- 洛谷 P1078 文化之旅
- pip install error
- 不变的自己
- java 两个栈实现队列与两个列实现栈
- struts2表单错误处理和数据验证
- 接口的特点
- JavaScript 表达式与运算符(2017-1-10更新)
- PSNR
- JMeter 参数化之利用JDBC Connection Configuration从数据库读取数据并关联变量
- TokuDB7.5.7-2.1使用TokuDB的系统和硬件需求v1
- JZOJ4847【NOIP2016提高A组集训第5场11.2】夕阳
- tomcat配置
- 笔试总结2