spring form 以及数据校验

本文将讲述spring form的一些常用标签,以及基于org.hibernate.validator和javax.validation 的javabean数据校验。

1 在views/home/下面建一个index.jsp 在jsp头部引入 <%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%> 然后写一个form表单。该表单每个标签下面都有一个  <sf:errors path="" /> 标签 这个标签是用来接收该属性的错误信息的

<sf:form method="POST" action="login" commandName="user">
	用户名:<sf:input path="name" />
	<sf:errors path="name" /><br/>
	
	密码:<sf:password path="password" />
	<sf:errors path="password" /><br/>
	
	年龄:<sf:input path="age" />
	<sf:errors path="age" /><br/>
	
	邮箱:<sf:input path="email" type="email"/>
	<sf:errors path="email" /><br/>
	
	博客:<sf:input path="blogUrl"/>
	<sf:errors path="blogUrl" /><br/>
	
	<input type="submit" value="提交">
	</sf:form>
注意 form表单有一个commandName 属性,这个属性必须与跳转到views/home/index.jsp的controller中的model的其中一个属性key一致.这句话有点绕。我将贴出代码详细讲解。假如我是在下面的controller跳转到views/home/index.jsp这个页面的。(读一些代码中的注释)

	@RequestMapping("/")
	public String home(Model model){
		model.addAttribute("user", new User());
		//这里的key "user" 与下面返回的jsp页面form表单的commandName属性对应,那么该form表单将展示  new User() 的数据
		//如果jsp页面表单的commandName属性在此model中找不到对应的key则jsp页面将会报错
		return "home/index";
	}


2 新建一个实体类 user

public class User {
	
	@NotBlank(message="用户名不能为空")//此注解来自于org.hibernate.validator
	@Length(min=0,max=15,message="用户名必须介于0-15位")//此注解来自于org.hibernate.validator
	private String name;
	
	@NotNull(message="密码不能为空")//此注解来自于javax.validation
	@Size(min=6,max=12,message="密码必须介于6-12位")//此注解来自于javax.validation
	private String password;
	
	@NotNull(message="年龄不能为空")
	@Digits(fraction = 0, integer = 2,message="年龄不能超过两位数,且不能是小数")
	@Min(value=0,message="年龄不能小于0")
	@Max(value=99,message="年龄不能大于99")
	private int age;
	
	@Email(message="邮箱格式不正确")//此注解来自于org.hibernate.validator
	@NotNull
	private String email;//邮箱
	
	@URL(message="博客地址不正确")//此注解来自于org.hibernate.validator
	private String blogUrl;//博客地址
	
	//省略setter 和 getter

	//将下面三个方法的重写交给org.apache.commons.lang3.builder这个包
	@Override
	public boolean equals(Object that) {
		return EqualsBuilder.reflectionEquals(this, that,"password","name");
	}
	@Override
	public int hashCode(){
		return HashCodeBuilder.reflectionHashCode(this,"password","name");
	}
	
	@Override
	public String toString(){
		return ReflectionToStringBuilder.toString(this);
	}
}

3 新建一个接收form表单数据的controller

	@RequestMapping("login")
	public String login(@Valid User user,Errors errors){//这里user要用@valid注解
		if(errors.hasErrors()){		//如果验证有错,在控制台打印所有错误信息 并返回原表单页面
			List<ObjectError> list = errors.getAllErrors();
			for(ObjectError oe : list){
				System.out.println(oe.getDefaultMessage());
			}
			System.out.println(errors.getAllErrors());
			return "home/index";
		}
		return "home/other";
	}

4:验证结果 输入表单信息,点击提交 ,返回错误信息


当然 这些错误信息还可以做的更完美,即结合国际化去设置错误信息,国际化这个知识点将在以后的文章中提到。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值