Spring mvc @initBinder 类型转化器的使用
1.jsp 页面
<form action=
"${pageContext.request.contextPath }/first.do"
method=
"post"
>
出生日期:<input name=
"birthday"
/><br/><br/>
年龄:<input name=
"age"
/><br/><br/>
<input type=
"submit"
value=
"注册"
/>
</form>
2 日期转换类
package
cn.happy.controller;
import
java.sql.Date;
import
java.text.ParseException;
import
java.text.SimpleDateFormat;
import
java.util.regex.Pattern;
import
org.springframework.beans.TypeMismatchException;
import
org.springframework.beans.propertyeditors.PropertiesEditor;
public
class
MyDateEditor
extends
PropertiesEditor{
@Override
public
void
setAsText(String source)
throws
IllegalArgumentException {
SimpleDateFormat sdf=getDate(source);
//做一个操作
try
{
setValue(sdf.parseObject(source));
}
catch
(ParseException e) {
e.printStackTrace();
}
}
private
SimpleDateFormat getDate(String source) {
SimpleDateFormat sdf=
null
;
if
(Pattern.matches(
"^\\d{4}-\\d{2}-\\d{2}$"
, source)) {
sdf=
new
SimpleDateFormat(
"yyyy-MM-dd"
);
}
else
if
(Pattern.matches(
"^\\d{4}/\\d{2}/\\d{2}$"
, source)) {
sdf=
new
SimpleDateFormat(
"yyyy/MM/dd"
);
}
else
if
(Pattern.matches(
"^\\d{4}\\d{2}\\d{2}$"
, source)) {
sdf=
new
SimpleDateFormat(
"yyyyMMdd"
);
}
else
{
throw
new
TypeMismatchException(
""
, Date.
class
);
}
return
sdf;
}
}
3 action 类
package
cn.happy.controller;
import
java.beans.PropertyEditor;
import
java.text.DateFormat;
import
java.text.SimpleDateFormat;
import
java.util.Date;
import
org.springframework.beans.propertyeditors.CustomDateEditor;
import
org.springframework.beans.propertyeditors.PropertiesEditor;
import
org.springframework.stereotype.Controller;
import
org.springframework.web.bind.WebDataBinder;
import
org.springframework.web.bind.annotation.InitBinder;
import
org.springframework.web.bind.annotation.RequestMapping;
@Controller
public
class
FirstController {
/**
*
* @param binder
*/
@InitBinder
public
void
initBinder(WebDataBinder binder){
binder.registerCustomEditor(Date.
class
,
new
MyDateEditor());
System.out.println(
"===============11111"
);
}
@RequestMapping
(
"/first.do"
)
//类型转化工作一定是在真正的handler方法执行前执行的。
public
String doFirst(Date birthday,
int
age)
throws
Exception{
System.out.println(birthday+
"==============="
);
System.out.println(age+
"==============="
);
return
"/WELCOME.jsp"
;
}
}