前言
讲解在修改超市订单系统项目中的知识点,和易错点,希望可以帮助大家理解Spring MVC 的用法。
@ModelAttribute
@ModelAttribute使用大致有有两种,一种是是直接标记在方法上,一种是标记在方法的参数中,两种标记方法产生的效果也各不相同。
-
直接标记在方法上
当同一个controller(控制器)中有任意一个方法被@ModelAttribute注解标记,页面请求只要进入这个控制器,不管请求那个方法,均会先执行被@ModelAttribute标记的方法,所以我们可以用@ModelAttribute注解的方法做一些初始化操作。当同一个controller中有多个方法被@ModelAttribute注解标记,所有被@ModelAttribute标记的方法均会被执行,按先后顺序执行,然后再进入请求的方法。 -
标记在方法的参数中
Spring MVC中,将方法入参 对象 添加到模型中,仅需要在对应的入参前使用 (1)@ModelAttribute注解即可。(2)当然也可以不使用@ModelAttribute,直接在Model入参,并将对象放入.@RequestMapping(value="/useradd.html",method=RequestMethod.GET) public String addUser(@ModelAttribute("user") User user){ return "useradd"; }
@RequestMapping(value="/useradd.html",method=RequestMethod.GET) public String addUser(User user,Model model){ model.addAttribute("user", user); return "useradd"; }
@DateTimeFormat
Spring MVC框架中 时间 类型的数据无法自动绑定,要在实体类时间类型的属性中添加注解@DateTimeFormat
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date birthday; //出生日期
Spring 表单标签
Spring MVC项目开发的时候,一般会使用EL和JSTL完成视图的开发,Spring 有自己一套表达标签库,通过Spring 表单标签,很容易将模型数据中的表单绑定到HTML表单元素中。
Spring 常用表单标签
名称 | 说明 |
---|---|
<fm:form/> | 渲染表单元素 |
<fm:input/> | 输入框组件标签 |
<fm:password/> | 密码框组件标签 |
<fm:hidden/> | 隐藏框组件标签 |
<fm:textarea/> | 隐藏框组件标签 |
<fm:radiobutton/> | 单选框组件标签 |
<fm:checkbox/> | 复选框组件标签 |
<fm:select/> | 下拉列表组件标签 |
<fm:error/> | 显示表单数据校验所对应的错误信息 |
-
JSP页面导入Spring MVC标签库,与导入JSTL标签库的语法非常相似,前缀prefix可以自定义,通常定义为form。
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="fm" %>
数据校验
Spring MVC又两种方式可以验证输入:
- 利用Spring 自带的验证框架
- 利用JSR 303 实现
JSR 303
- Java为Bean数据合法性校验所提供的标准框架
- Spring MVC支持JSR 303标准的校验框架
- JSR 303通过在Bean属性上标注校验注解指定校验规则,并通过标准的验证接口对Bean进行验证
- http://jcp.org/en/jsr/detail?id=303
注意
- Spring本身没有提供JSR 303的实现
- 实现者:Hibernate Validator
- http://hibernate.org/validator
JSR 303 约束
约束 | 说明 |
---|---|
@Null | 被注释的元素必须为 null |
@NotNull | 被注释的元素必须不为 null |
@AssertTrue | 被注释的元素必须为 true |
@AssertFalse | 被注释的元素必须为 false |
@Min(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@Max(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@DecimalMin(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@DecimalMax(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@Size(max=, min=) | 被注释的元素的大小必须在指定的范围内 |
@Digits (integer, fraction) | 被注释的元素必须是一个数字,其值必须在可接受的范围内 |
@Past | 被注释的元素必须是一个过去的日期 |
@Future | 被注释的元素必须是一个将来的日期 |
@Pattern(regex=,flag=) | 被注释的元素必须符合指定的正则表达式 |
实现步骤
- 加入jar文件
- hibernate-validator-4.3.2.Final.jar
- jboss-logging-3.1.0.CR2.jar
- validation-api-1.0.0.GA.jar
- POJO
- 修改实体类
- 给需要验证的属性增加相应的校验注解
RESR 风格
什么是REST风格
- Representational State Transfer,表述性状态转移,是一种软件架构风格