数据格式化是我们在提交数据(比如表单时)时,SpringMVC 对提交的数据进行转换和处理。
基本数据类型可以和字符串之间自动完成转换,因为Spring MVC 上下文中内建了很多转换器,可完成大多数Java 类型的转换工作。[相互转换,这里只列出部分]。
java.lang.Boolean -> java.lang.String :org.springframework.core.convert.support.ObjectToStringConverter@f874ca
java.lang.Character -> java.lang.Number : CharacterToNumberFactory@f004c9
java.lang.Character -> java.lang.String : ObjectToStringConverter@68a961
java.lang.Enum -> java.lang.String : EnumToStringConverter@12f060a
java.lang.Number -> java.lang.Character : NumberToCharacterConverter@1482ac5
java.lang.Number -> java.lang.Number : NumberToNumberConverterFactory@126c6f
java.lang.Number -> java.lang.String : ObjectToStringConverter@14888e8
java.lang.String -> java.lang.Boolean : StringToBooleanConverter@1ca6626
java.lang.String -> java.lang.Character : StringToCharacterConverter@1143800
java.lang.String -> java.lang.Enum : StringToEnumConverterFactory@1bba86e
java.lang.String -> java.lang.Number : StringToNumberConverterFactory@18d2c12
java.lang.String -> java.util.Locale : StringToLocaleConverter@3598e1
java.lang.String -> java.util.Properties : StringToPropertiesConverter@c90828
java.lang.String -> java.util.UUID : StringToUUIDConverter@a42f23
java.util.Locale -> java.lang.String : ObjectToStringConverter@c7e20a
java.util.Properties -> java.lang.String : PropertiesToStringConverter@367a7f
java.util.UUID -> java.lang.String : ObjectToStringConverter@112b07f ……
基本数据类型可以和字符串之间自动完成转换。
创建JavaBean:springmvc\src\com\web\datavalid\Monster.java
public class Monster {
private Integer id;
private String email;
private Integer age;
private String name;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Monster() {
}
public Monster(Integer id, String email, Integer age, String name) {
this.id = id;
this.email = email;
this.age = age;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Monster{" +
"id=" + id +
", email='" + email + '\'' +
", age=" + age +
", name='" + name + '\'' +
'}';
}
}
创建springmvc\web\data_valid.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
SpringMVC[数据格式/验证等]
SpringMVC[数据格式/验证等]
添加妖怪
创建springmvc\src\com\web\datavalid\MonsterHandler.java
// MonsterHandler 处理器响应用户提交数据
@Controller//将其注入到容器
@Scope(value = "prototype")//表示每次请求MonsterHandler会生成一个新的对象
public class MonsterHandler {
/**
* 显示添加monster的界面
* 1. 这里Map map
* 2. 当我们向map添加的数据时,会默认存放到request域
*/
@RequestMapping(value = "/addMonsterUI")//设置访问路径
public String addMonsterUI(Map<String, Object> map) {
/**
1. 这里的表单,我们使用springMVC的标签来完成
2. SpringMVC 表单标签在显示之前必须在 request 中有一个 bean, 该 bean 的属性和表单标签的字段要对应!
request 中的 key 为: form 标签的 modelAttrite 属性值, 比如这里的monsters
3. SpringMVC 的 form:form 标签的 action 属性值中的 / 不代表 WEB 应用的根目录.
4.
*/
//这里需要给request增加一个 monster,因为jsp 页面 的modelAttribute="monster"需要存放内容
//这时是springMVC的内部的检测机制 即使是一个空的也需要,否则报错.
//再次说明,如果你跳转的页面使用springmvc标签
//就需要准备一个对象,放入request域中,空的也可以,该对象的字段必须和表单标签字段对应
//假设这个对象的属性名 monster, 对于springmvc表单标签的 modelAttribute="monster"
map.put("monster", new Monster());
return "datavalid/monster_addUI";
}
}
创建springmvc\web\WEB-INF\pages\datavalid\monster_addUI.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
添加妖怪
添加妖怪
妖怪名字:
妖怪年龄~:
电子邮件:
妖怪生日: 要求以"9999-11-11"的形式
妖怪薪水: 要求以"123,890.12"的形式
创建springmvc\web\WEB-INF\pages\datavalid\success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
添加成功
恭喜, 添加成功~
看看是否可以正确显示添加要求界面(页面测试)。浏览器: http://localhost:8080/springmvc/data_valid.jsp
修改MonsterHandler.java , 增加处理添加请求
//处理添加,更加请求的方法来确定
@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(Monster monster) {
//注意观察输出内容
System.out.println("monster= " + monster);
return "datavalid/success";
}
测试, 浏览器: http://localhost:8080/springmvc/data_valid.jsp
说明:
修改Monster.java , 增加birthday 和salary 字段
增加属性后不要忘了添加对应的get/set方法,不然后面读取不了。
@DateTimeFormat(pattern="yyyy-MM-dd")//设置日期格式
private Date birthday;
@NumberFormat(pattern="###,###.##")//设置货币格式
private float salary;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public float getSalary() {
return salary;
}
public void setSalary(float salary) {
this.salary = salary;
}
public Monster(Integer id, String email, Integer age, String name, Date birthday, float salary) {
this.id = id;
this.email = email;
this.age = age;
this.name = name;
this.birthday = birthday;
this.salary = salary;
}
@Override
public String toString() {
return "Monster{" +
"id=" + id +
", email='" + email + '\'' +
", age=" + age +
", name='" + name + '\'' +
", birthday=" + birthday +
", salary=" + salary +
'}';
}
修改monster_addUI, 增加birthday 和salary 字段
妖怪年龄~:
妖怪生日: 要求以"9999-11-11"的形式
妖怪工资: 要求以"123,890.12"的形式