表单
表单用的是springmvc的form标签
- 引入springmvc的form标签
- 在form标签中使用modelAttribute属性指明表单对应的bean对象
- 如果bean对象是空值,那么表单没有内容
如果bean对象有内容,那么表单回显内容
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form:form action="${pageContext.request.contextPath}/test" method="post" modelAttribute="employee">
name:<form:input path="empName"/><br>
<!-- path对应的是bean对象的属性名 -->
email:<form:input path="empEmail"/><br>
<br><button type="submit">提交</button>
</form:form>
</body>
</html>
@Controller
public class Test {
@RequestMapping(value="/test")
public String test(Map<String,Object> map){
// map.put("employee", new Employee());//"employee"是表单对应的bean名称
Employee employee = new Employee();
employee.setEmpName("dd");
employee.setEmpEmail("1137@qq.com");
map.put("employee", employee);
return "test";
}
}
Paste_Image.png
Paste_Image.png
JSR-303进行校验:
1. 新加hibernate-validator jar包
到官网下载>http://hibernate.org/validator/
2. 开启<mvc:annotation-driven/>
3. 在bean属性中添加对应的注解
@Email //表单验证-邮箱格式
@NotEmpty //表单验证-不能为空
private String empEmail;
空检查
@Null 验证对象是否为null
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.
Booelan检查
@AssertTrue 验证 Boolean 对象是否为 true
@AssertFalse 验证 Boolean 对象是否为 false
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) Validates that the annotated string is between min and max included.
日期检查
@Past 验证 Date 和 Calendar 对象是否在当前时间之前
@Future 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern 验证 String 对象是否符合正则表达式的规则
数值检查,建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为"",Integer为null
@Min 验证 Number 和 String 对象是否大等于指定的值
@Max 验证 Number 和 String 对象是否小等于指定的值
@DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度
@DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度
@Digits 验证 Number 和 String 的构成是否合法
@Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。
@Range(min=, max=) Checks whether the annotated value lies between (inclusive) the specified minimum and maximum.
@Range(min=10000,max=50000,message="range.bean.wage")
private BigDecimal wage;
@Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证)
@CreditCardNumber信用卡验证
@Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。
@ScriptAssert(lang= ,script=, alias=)
@URL(protocol=,host=, port=,regexp=, flags=)
4. 在目标方法bean类型前面添加@Valid注解
public String save(@Valid Employee employee)
补充
还可以结合BindingResult,如果表单验证出错将会在后台和前台显示出错误信息;这里还要用到一个标签
<form:errors path="bean属性名"/>
name:<form:input path="empName"/>
<form:errors path="empName"/><br>
email:<form:input path="empEmail"/>
<form:errors path="empEmail"/><br>
gender:
<form:radiobuttons path="empGender" items="${genders}"/>
<form:errors path="empGender"/><br>
/**添加Employee*/
@RequestMapping(value="/emp",method=RequestMethod.POST)
public String save(@Valid Employee employee,BindingResult result,Map<String,Object> map){
if (result.getFieldErrorCount()>0){
for (FieldError error:result.getFieldErrors()){
System.out.println(error.getField()+":"+error.getDefaultMessage());
}
Map<Integer,String> genders = new HashMap<Integer,String>();
genders.put(0, "Female");
genders.put(1, "Male");
map.put("genders", genders);
map.put("depts", departmentDao.getAll());
//跳到要显示错误的页面(不能使用redirect)
return "input";//
}
employeeDao.save(employee);
return "redirect:/list";
}
//empEmail:不是一个合法的电子邮件地址
//empEmail:不能为空
//empName:不能为空
//!!! @Valid修饰的bean对象必须紧挨着BindingResult对象
Paste_Image.png
自定义显示错误信息
前面已经在后台和前台输出了表单验证的错误信息,但是错误信息的内容是已经内置好的,现在我们要自定义一份自己的表单验证错误信息
- 配置国际化资源文件
<!-- 配置国际化资源文件 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="errors"></property>
</bean>
- src下创建errors.properties资源文件
NotEmpty.employee.empName=\u8BF7\u8F93\u5165\u7528\u6237\u540D
NotNull.employee.empGender=\u8BF7\u9009\u62E9\u6027\u522B
NotEmpty.employee.empEmail=\u8BF7\u8F93\u5165\u90AE\u7BB1
Email.employee.empEmail=\u8BF7\u8F93\u5165\u6B63\u786E\u683C\u5F0F\u7684\u90AE\u7BB1
//格式:标签注解(不要@).bean名.bean对应属性
required:必要的参数不存在,如@RequiredParam("param1")标注
了一个入惨,但是该参数不存在
typeMismatch:在数据绑定时,发生数据类型不匹配的问题,如日期格式不匹配
methodInvocation:Spring MVC在调用处理方法时发生了错误******
换个姿势再来一次
Paste_Image.png
网友评论