0%

6.3 数据格式化 3.使用AnnotationFormatterFactory格式化数据

6.3 数据格式化 3.使用AnnotationFormatterFactory格式化数据

testForm.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
30
31
32
33
34
35
36
37
<%@ 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>测试AnnotationFormatterFactory</title>
</head>
<body>
<h3>测试表单数据格式化</h3>
<form action="test" method="post">
<table>
<tr>
<td><label>日期类型: </label></td>
<td><input type="text" id="birthday"
name="birthday"></td>
</tr>
<tr>
<td><label>整数类型: </label></td>
<td><input type="text" id="total" name="total"></td>
</tr>
<tr>
<td><label>百分数类型: </label></td>
<td><input type="text" id="discount"
name="discount"></td>
</tr>
<tr>
<td><label>货币类型: </label></td>
<td><input type="text" id="money" name="money"></td>
</tr>
<tr>
<td><input id="submit" type="submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>

User.java

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
30
// 域对象,实现序列化接口
public class User
implements Serializable
{
private static final long serialVersionUID = 1L;
// 日期类型
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;
// 正常数字类型
@NumberFormat(style = Style.NUMBER, pattern = "#,###")
private int total;
// 百分数类型
@NumberFormat(style = Style.PERCENT)
private double discount;
// 货币类型
@NumberFormat(style = Style.CURRENCY)
private double money;
public User()
{
super();
// TODO Auto-generated constructor stub
}
// 此处省略getter和setter方法,请自己补上
@Override
public String toString()
{
return "User [birthday=" + birthday + ", total=" + total + ", discount="
+ discount + ", money=" + money + "]";
}
}

User类的多个属性使用了@DateTimeFormat@NumberFormat注解,用于将页面传递的String转换成对应的格式化数据。

FormatterController.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Controller
public class FormatterController {
@GetMapping(value = "/testForm")
public String registerForm()
{
// 跳转到测试表单数据格式化
return "testForm";
}
@PostMapping(value = "/test")
public String test(@ModelAttribute
User user, Model model)
{
System.out.println(user);
model.addAttribute("user", user);
return "success";
}
}

success.jsp

如果希望在视图页面中将模型属性数据以格式化的方式进行渲染,则需要使用Spring的页面标签显示模型数据。所以form:form标签,并且绑定了User对象.

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
30
31
32
33
34
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试AnnotationFormatterFactory</title>
</head>
<body>
<h3>测试表单数据格式化</h3>
<form:form modelAttribute="user" method="post" action="">
<table>
<tr>
<td>日期类型:</td>
<td><form:input path="birthday" /></td>
</tr>
<tr>
<td>整数类型:</td>
<td><form:input path="total" /></td>
</tr>
<tr>
<td>百分数类型:</td>
<td><form:input path="discount" /></td>
</tr>
<tr>
<td>货币类型:</td>
<td><form:input path="money" /></td>
</tr>
</table>
</form:form>
</body>
</html>

springmvc-config.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<beans
...
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- spring可以自动去扫描base-pack下面的包或者子包下面的java文件, -->
<!--如果扫描到有Spring的相关注解的类,则把这些类注册为Spring的bean -->
<context:component-scan base-package="org.fkit.controller" />
<!-- 默认装配方案 -->
<mvc:annotation-driven />
<!-- 静态资源处理 -->
<mvc:default-servlet-handler />
<!-- 视图解析器 p:prefix属性表示前缀 p:suffix 表示后缀 -->
<bean
id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/content/"
p:suffix=".jsp" />
</beans>

在配置文件中只是使用了默认装配方案: mvc:annotation-driven标签,而该标签内部默认创建的 Conversionservice实例就是一个FormattingConversionServiceFactoryBean,这样就可以支持注解驱动的格式化功能了,不需要过多的配置.

测试

填写表单

这里有一张图片

转换效果

这里有一张图片

控制台输出

1
User [birthday=Tue Mar 04 00:00:00 CST 1253, total=155123, discount=0.15, money=123.0]

原文链接: 6.3 数据格式化 3.使用AnnotationFormatterFactory格式化数据