1.类型转换的认识
页面所提交过来的数据都是字符串类型,而model里面的数据类型并不都是字符串,有各种类型,我们使用servlet来接收数据时,都是自己的手动转换的,struts2可以为我们自动转换,转换的前提是前端提交的字符串和model中的相应的数据类型可以转换。
提交表单时:字符串转--->其他类型
页面展示:其他类型--->字符串
表单提交时数据类型的转换struts给我们做了绝大多数,但是时间类型往往需要跟我们自己的需求来做转换的。
2.自定义类型转换
3.日期转换
默认情况下struts2解析的时间的格式:“yyyy-MM-dd”
- 1.通过自定义类型转换器继承StrutsTypeConverter
package converter;
import org.apache.struts2.util.StrutsTypeConverter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
public class MyDateConverter extends StrutsTypeConverter {
@Override
public Object convertFromString(Map map, String[] strings, Class aClass) {
Date date = null;
if(strings != null && strings.length>0) {
if(aClass == Date.class){
try {
date = new SimpleDateFormat("yyyy-MM-dd").parse(strings[0]);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
return date;
}
//转字符串
@Override
public String convertToString(Map map, Object o) {
String dateStr = null;
if(o.getClass() == Date.class && o != null) {
dateStr = new SimpleDateFormat("yyyy-MM-dd").format(o);
}
return dateStr;
}
}
- 2.注册日期类型转换器
局部注册:
第一步:再要转换的model类的统计包中建立一个属性文件,命名要求:model类名-conversion.properties,在文件的内部key是要转换的属性名称.
全局注册:
如果有很多的Model类,都有时间类型,那么使用局部的类型转换器就需要创建很多注册文件,这样不合理。需要全局注册。
方法:在classpath下创建一个属性文件:xwork-conversion.properties
把错误提示信息转换成中文
1.在Action类的同级包下创建一个属性文件,规则:和action类同名.properties
2.key:invalid.fieldvlaue.[要转换的表单中文本域的name:birthday], value是中文的提示信息,中文在properties文件中以Unicode的编码的方式。
jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<s:fielderror></s:fielderror>
<form action="${pageContext.request.contextPath}/person/hello" method="post">
<table>
<tr>
<td>ID</td>
<td>
<input type="text" name="id">
</td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>性别</td>
<td>
<input type="radio" name="gender" value="1" checked="checked">男
<input type="radio" name="gender" value="2" checked="checked">女
</td>
</tr>
<tr>
<td>地址</td>
<td>
<input type="text" name="address">
</td>
</tr>
<tr>
<td>生日</td>
<td>
<input type="text" name="birtday">
</td>
</tr>
</table>
<input type="submit" value="提交">
</form>
</body>
</html>