自定义类型转换器可以实现内置转换器无法转换的特殊类型数据,比如自己创建的类的拆分封装,日期格式的转换等,以日期转换为例
- 自定义一个转换类,该类需要继承父类
StrutsTypeConverter
,并重写convertFromString()
方法,方法内自定义数据类型转换逻辑
public class DateFormarConvert extends StrutsTypeConverter{
private String[] date = { "yyyy-MM-dd",
"yyyy/MM/dd",
"yy/MM/dd",
"yyyy年MM月dd日"};
@Override
//其中mydate为前端传来的值
public Object convertFromString(Map arg0, String[] mydate, Class arg2) {
Date d = null;
System.out.println("进入自定义转换器!");
for (String obj : date) {
SimpleDateFormat sdf = new SimpleDateFormat(obj);
try {
System.out.println("进入循环转换器!");
d = sdf.parse(mydate[0]);
} catch (ParseException e) {
continue;
}
return d;
}
//类型转换失败抛出异常
throw new TypeConversionException();
}
@Override
public String convertToString(Map arg0, Object arg1) {
// TODO Auto-generated method stub
return null;
}
}
-
通过添加属性文件启用自定义类型转换,可分两种方式
- 局部引用
只供一个Action类的某一个属性使用,
在Action类的同级目录下创建类名-conversion1.properties
的文件,
其内容为Action类的某个属性=自定义类型转换的类路径
mydate=utils.DateFormarConvert
- 全局引用
自定义转换器可供所有Action类使用,
在src目录下创建xwork-conversion.properties
的文件,
其内容为Action类的属性类型=自定义类型转换的类路径
java.util.Date=utils.DateFormarConvert
- 局部引用
-
类型转换失败的客户提示
- 首先,需要在自定义的转换类中抛出异常
throw new TypeConversionException();
- 在Struts.xml文件对应的action标签中配置name为input的结果标签
<result name="input">/struts2Jsp/login.jsp</result>
其中input为框架自动生成 - 在页面中加入
<s:fielderror fieldName="mydate"></s:fielderror>
标签
其中fieldName为action类中的属性名 - 错误提示信息客户化
1. 局部,只作用于某一个action类
在action类的同级目录中添加Action类.properties
的文件,
内容为invalid.fieldvalue.属性名=提示信息
在此文件中汉字会自动转化为别的格式
- 首先,需要在自定义的转换类中抛出异常
invalid.fieldvalue.mydate=日期信息填写错误!
- 全局,作用于全部action类
在Struts.xml文件中添加常量配置
<constant name="struts.custom.i18n.resources" value="message"></constant>
并在src目录下创建名为message.properties
的文件.在其中配置
xwork.default.invalid.fieldvalue=字段"{0}"值无效!!!```其中
{0}`表示动态获取当前字段