SpringMVC之转换器和格式化
来源:互联网 发布:淘宝海外直购 编辑:程序博客网 时间:2024/05/20 07:35
Converter
Spring的Converter可以将一种类型转换另一种类型的对象,例如:如果希望Spring在将输入的日期字符串绑定到Date时,使用不同的日期样式,需要使用Converter来将字符串转换日期
创建Converter需要实现Converter< String,Date >接口
StringToDateConverter
负责将字符串转换日期
public class StringToDateConverter implements Converter<String ,Date>{ private String datePattern; public StringToDateConverter(String datePattern) { this.datePattern = datePattern; System.out.println("instantiating...converter with patter:*"+datePattern); } @Override public Date convert(String s) { try { SimpleDateFormat dateFormat=new SimpleDateFormat(datePattern); //不要严格解析日期 dateFormat.setLenient(false); return dateFormat.parse(s); } catch (ParseException e) { throw new IllegalArgumentException("invalid date format.Please use this pattern\"" + datePattern+"\""); } }}
还需要在配置文件中编写conversionService bean,该bean必须提供一个converters属性。它将罗列在应用程序中使用的所有定制Converter,比如上面的StringToDateConverter
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <list> <bean class="converter.StringToDateConverter"> <constructor-arg type="java.lang.String" value="yyyy-MM-dd"></constructor-arg> </bean> </list> </property> </bean>
然后添加mvc:annotation-driven元素的conversion-service属性赋conversionService
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
Employee类
public class Employee implements Serializable{ private static final long serialVersionUID=-9191L; private long id; private String firstName; private String lastName; private Date birthDate; private int salaryLevel; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public Date getBirthDate() { return birthDate; } public void setBirthDate(Date birthDate) { this.birthDate = birthDate; } public int getSalaryLevel() { return salaryLevel; } public void setSalaryLevel(int salaryLevel) { this.salaryLevel = salaryLevel; }}
Employee对象的控制器EmployeeController
@Controllerpublic class EmployeeController { private static final Log logger = LogFactory .getLog(EmployeeController.class); @RequestMapping(value = "employee_input") public String inputEmployee(Model model) { model.addAttribute(new Employee()); return "EmployeeForm"; } @RequestMapping(value = "employee_save") public String saveEmployee(@ModelAttribute Employee employee, BindingResult bindingResult, Model model) { if (bindingResult.hasErrors()) { FieldError fieldError = bindingResult.getFieldError(); logger.info("Code:" + fieldError.getCode() + ",field:" + fieldError.getField()); return "EmployeeForm"; } model.addAttribute("employee", employee); return "EmployeeDetails"; }}
在saveEmployee方法的BindingResult参数中设置了Spring的所有绑定错误,该方法利用BindingResult记录所有绑定错误,绑定错误也利用errors标签显示在一个表单中
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><html><head><title>Add Employee Form</title></head><body> <div id="global"> <form:form commandName="employee" action="employee_save" method="post"> <fieldset> <legend>Add an Employee</legend> <p> <label for="firstName">First Name:</label> <form:input path="firstName" tabindex="2" /> </p> <p> <form:errors path="birthDate" cssClass="error"/> </p> <p> <label for="birthDate">Date Of Birth:</label> <form:input path="birthDate" tabindex="3" /> </p> <P id="buttons"> <input id="reset" type="reset" tabindex="4"> <input id="submit" type="submit" tabindex="5" value="Add Employee"> </P> </fieldset> </form:form> </div></body></html>
关于Spring的form标签的解释
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
使用Spring的form标签主要有两个作用,第一是它会自动的绑定来自Model中的一个属性值到当前form对应的实体对象,
默认是command属性,这样我们就可以在form表单体里面方便的使用该对象的属性了;
第二是它支持我们在提交表单的时候使用除GET和POST之外的其他方法进行提交,包括DELETE和PUT等
运行结果
当输入错误的日期格式
它会跳到同一表单,并提示错误
当输入正确的日期格式
跳到另一个表单,并显示信息
- SpringMVC之转换器和格式化
- SpringMVC学习之三转换器和格式化
- SpringMVC自定义格式化转换器
- 转换器和格式化
- maven与springMVC之类型转换器
- 学习SpringMVC(十七)之自定义类型转换器
- springmvc之自定义类型转换器ConversionServiceFactoryBean
- SpringMVC转换器
- SpringMVC 转换器
- SpringMVC转换器
- SpringMVC中的日期转换器和编码过滤器
- springmvc的日期转换器和编码过滤器
- springmvc之数据的格式化
- SpringMVC数据类型转换和格式化
- 【笔记】Spring MVC学习指南(六)转换器和格式化
- (笔记)Spring MVC学习指南_转换器和格式化
- SpringMVC之配置用于@ResponseBody的HttpMessageConverter转换器
- SpringMVC之数据类型的转换及自定义类型转换器
- 18005 It is not ugly number
- PAT 1005. 继续(3n+1)猜想 (25) —— Java
- apk安装失败原因列表
- web开发工具Sublime Text 3
- Problem H Pyro Tubes
- SpringMVC之转换器和格式化
- 再谈new的内存的释放实例-类的多态
- 数据库中间件 MyCAT 源码解析 —— 分片结果合并(一)
- Mybatis中$和#的区别
- 记票统计
- 串口波特率计算详解
- javascript 中的 this用法。
- vm安装mac虚拟机 vcpu-0错误
- 机器学习算法实现解析——libFM之libFM的训练过程之Adaptive Regularization