0%

6.2.2 Spring支持的转换器 示例 使用WebBindingInitializer注册全局自定义编辑器转换数据

6.2.2 Spring支持的转换器 示例 使用WebBindingInitializer注册全局自定义编辑器转换数据

如果希望在全局范围内使用自定义的编辑器,则可以通过实现WebBindingInitializer接口并在该实现类中注册自定义编辑器完成.

注册自定义编辑器

1
2
3
4
5
6
7
8
9
10
11
// 实现WebBindingInitializer接口
public class DateBindingInitializer
implements WebBindingInitializer
{
@Override
public void initBinder(WebDataBinder binder)
{
// 注册自定义编辑器
binder.registerCustomEditor(Date.class, new DateEditor());
}
}

DateBindingInitializer类实现WebBindingInitializer接口,并在 initBinder()方法中注册自定义编辑器DateEditorr类.

自定义编辑器

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();
}
}
}

在Spring配置文件中装配自定义编辑器

UserController类中不需要再使用@initBinder注解的方法来注册编辑器,而是在springmvc-config.xml配置文件中配置全局的自定义编辑器。

1
2
3
4
5
6
7
<!-- 通过RequestMappingHandlerAdapter装配自定义编辑器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="webBindingInitializer">
<!-- 指定自定义的编辑器所在的全路径名 -->
<bean class="org.fkjava.binding.DateBindingInitializer" />
</property>
</bean>

不能再使用默认装配方案

注意,这里使用了RequestMappingHandlerAdapter装配自定义编辑器,不能再使用默认配置方案<mvc:annotation-driven />

领域对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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>

registerForm请求处理方法

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

registerForm.jsp

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
26
27
28
29
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试WebBindingInitializer</title>
</head>
<body>
<h3>测试WebBindingInitializer</h3>
<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>
</body>
</html>

register请求处理方法

1
2
3
4
5
6
7
8
@PostMapping(value = "/register")
public String register(@ModelAttribute
User user, Model model)
{
System.out.println(user);
model.addAttribute("user", user);
return "success";
}

测试

填写表单

这里有一张图片

显示效果

这里有一张图片

控制台输出

1
User [loginname=小明, birthday=Sat May 06 00:00:00 CST 1234]

自定义的字符串转Date转换器运行成功。

原文链接: 6.2.2 Spring支持的转换器 示例 使用WebBindingInitializer注册全局自定义编辑器转换数据