0%

6.2.2 Spring支持的转换器 示例 使用InitBinder注解添加自定义编辑器转换数据

6.2.2 Spring支持的转换器 示例 使用InitBinder注解添加自定义编辑器转换数据

域对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.io.Serializable;
import java.util.Date;
public class User
implements Serializable
{
private static final long serialVersionUID = 1L;
private String loginname;
private Date birthday;
public User()
{
super();
// TODO Auto-generated constructor stub
}
// 此处省略getter和setter方法,请自己补上
@Override
public String toString()
{
return "User [loginname=" + loginname + ", birthday=" + birthday + "]";
}
}

测试链接

1
<a href="registerForm">registerForm</a>

请求处理方法

1
2
3
4
5
6
@GetMapping(value = "/registerForm")
public String registerForm()
{
// 跳转到注册页面
return "registerForm";
}

表单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<form action="register" method="post">
<table>
<tr>
<td>
<label>登录名: </label>
</td>
<td>
<input type="text" id="loginname" name="loginname">
</td>
</tr>
<tr>
<td>
<label>生日: </label>
</td>
<td>
<input type="text" id="birthday" name="birthday">
</td>
</tr>
<tr>
<td>
<input id="submit" type="submit" value="登录">
</td>
</tr>
</table>
</form>

填写表单并提交

这里有一张图片

表单处理方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 在控制器初始化时注册属性编辑器
@InitBinder
public void initBinder(WebDataBinder binder)
{
// 注册自定义编辑器
binder.registerCustomEditor(Date.class, new DateEditor());
}
@PostMapping(value = "/register")
//@ModelAttribute注解:把提交的请求数据赋值给user参数
public String register(@ModelAttribute
User user, Model mode)
{
System.out.println(user);
mode.addAttribute("user", user);
return "success";
}

并使用@InitBinde注解,该注解会在控制器初始化时注册属性编辑器。WebDataBinder对象用于处理请求消息和处理方法的绑定工作。binder.registerCustomEditor()方法对传入的Date类型使用DateEditor类进行转换。
使用了@InitBinder注解,不再需要在mvc:annotation-driven标签中装配自定义转换器。

自定义属性编辑器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 自定义属性编辑器
public class DateEditor
extends PropertyEditorSupport
{
// 将传入的字符串数据转换成Date类型
@Override
public void setAsText(String text) throws IllegalArgumentException
{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try
{
Date date = dateFormat.parse(text);
setValue(date);
} catch (ParseException e)
{
e.printStackTrace();
}
}
}

显示效果

这里有一张图片

原文链接: 6.2.2 Spring支持的转换器 示例 使用InitBinder注解添加自定义编辑器转换数据