小狼最近写东西总是有一个问题,action里面如果写成
private Date createTime;
get/set方法
jsp里面这么写
生日<input type="text" name="createTime">
就会报错。
这是为什么,小狼查了一下百度。struts2内置转换类型没有将java.lang.String转换成java.util.Date的实现,所以我们要来实现一下。
写一个DateConverter.java,实现DefaultTypeConverter,重写convertValue方法。
public class DateConverter extends DefaultTypeConverter {
@Override
public Object convertValue(Object value, Class toType) {
// TODO Auto-generated method stub
if (value == null) {
return false;
}
if (toType == null) {
return false;
}
if (toType != java.util.Date.class) {
return false;
}
if (value instanceof java.lang.String[]) {
String[] str = (String[]) value;
if (str[0] != null && str[0].length() > 0) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
return sdf.parse(str[0]);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
return new Date();
}
}
最后写完了得告诉struts2,我给你写了一个转换器。有两种方法。
第一种:在src目录下创建xwork-conversion.properties,全局转换器
java.util.Date=zcy.test.converter.DateConverter
转换类型=自定义转换器
第二种:在action目录下创建UserAction-conversion.properties,局部转换器,UserAction是本人写的action的名称,即createTime所在的action
createTime=zcy.test.converter.DateConverter
需要转换类型的字段名称=自定义转换器
当然,还有一个问题,当转换器不识别的时候,比如我输入的是1a2/12/12的时候,我们在错误页面这么写
<s:fielderror fieldName="createTime"/>
显示在浏览器是一串英文,这显然不合适
我们在struts2底层中找到这一句话 xwork-messages.properties
xwork.default.invalid.fieldvalue=Invalid field value for field "{0}".
我们想把他转换成中文
在struts2底层中default.properties找到struts.custom.i18n.resources
创建converter.properties名字随便起
这么写
xwork.default.invalid.fieldvalue=“转换类型失败{0}”.
写完之后得告诉struts2,我写了这个message。
在struts.xml中配置
<constant name="struts.custom.i18n.resources" value="converter"></constant>
ok