实训小笔记之—第6章 转换器和格式化

第6章 转换器和格式化

      本章主要学习了Converter 和Formatter 的内容。这两者均可用于将一种对象类型转换成另一种对象类型。Converter 是通用元件,可以在应用程序的任意层中使用,而Formatter 则是专门为Web 层设计的。

      Spring 的Converter 是可以将一种类型转换成另一种类型的一个对象。例如,用户输入的日期可能有许多种形式,如“December 25,2014”“12/25/2014”和“2014-12-25”,这些都表示同一个日期。默认情况下,Spring 会期待用户输入的日期样式与当前语言区域的日期样式相同。例如,对于美国的用户而言,就是月/日/年格式。如果希望Spring 在将输入的日期字符串绑定到LocalDate 时,使用不同的日期样式,则需要编写一个Converter,才能将字符串转换成日期。java.time.LocalDate 类是Java 8 的一个新类型,用来替代java.util.Date。还需使用新的Date/Time API 来替换旧有的Date 和Calendar 类。

       适用于任意日期样式的Converter

package converter;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import org.springframework.core.convert.converter.Converter;
public class StringToLocalDateConverter implements Converter<String,
LocalDate> {
private String datePattern;
public StringToLocalDateConverter(String datePattern) {
this.datePattern = datePattern;
}
@Override
public LocalDate convert(String s) {
try {
return LocalDate.parse(s, DateTimeFormatter.ofPattern(
datePattern));
} catch (DateTimeParseException e) {
// the error message will be displayed in <form:errors>
throw new IllegalArgumentException(
"invalid date format. Please use this pattern\""
+ datePattern + "\"");
}

}

}

converter-demo 中的EmployeeController 类

package controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import domain.Employee;
@Controller
public class EmployeeController {
@RequestMapping(value="/add-employee")
public String inputEmployee(Model model) {
model.addAttribute(new Employee());
return "EmployeeForm";
}
@RequestMapping(value="/save-employee")
public String saveEmployee(@ModelAttribute Employee employee,
BindingResult bindingResult, Model model) {
if (bindingResult.hasErrors()) {
FieldError fieldError = bindingResult.getFieldError();
return "EmployeeForm";
}
// save employee here
model.addAttribute("employee", employee);
return "EmployeeDetails";
}

}

        EmployeeController 类有inputEmployee 和saveEmployee 两个处理请求的方法。

        saveEmployee 方法的BindingResult 参数中放置了Spring 的所有绑定错误。该方法利用BindingResult 记录所有绑定错误。绑定错误也可以利用errors 标签显示在一个表单中。

       EmployeeForm.jsp 页面:

<%@ taglib prefix="form"uri="http://www.springframework.org/tags/form" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML>
<html>
<head>
<title>Add Employee Form</title>
<style type="text/css">@import url("<c:url
value="/css/main.css"/>");</style>
</head>
<body>
<div id="global">
<form:form commandName="employee" action="save-employee" method="post">
<fieldset>
<legend>Add an employee</legend>
<p>
<label for="firstName">First Name: </label>
<form:input path="firstName" tabindex="1"/>
</p>
<p>
<label for="lastName">First Name: </label>
<form:input path="lastName" 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>






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值