Struts2不能将页面输入的字符串转换到引用类型,需要自定义转换器。
1.开发类型转换器类:一般扩展框架中的 StrutsTypeConverter类,
2.配置类型转器:配置有2种
①基于字段所在Model的包下新建一个ModelClassName-conversion.properties,在文件中植入键值对:
fieldName=类型转换器的全类名(这个类是单例的)第一次使用创建
②基于类型配置
在src下新建 xwork-conversion.properties,键入 待转换类型=类型转换器全类名(不是单实例),加载项目应用时创建
Converter类
public class DateConverter extends StrutsTypeConverter{
private DateFormat df;
public DateConverter() {
df=new SimpleDateFormat("yyyy-MM-dd");
}
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
if(toClass ==Date.class){
if(values!=null&&values.length>0){
String value=values[0];
try {
return df.parse(value);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
//没转换成功就返回values
return values;
}
@Override
public String convertToString(Map context, Object obj) {
if(obj instanceof Date){
Date date=(Date) obj;
return df.format(date);
}
return null;//失败返回Null
}
}
第一种配置:配置文件需要和对应Model类在一个包下
ConversionAction-conversion.properties配置文件内容
birth=com.hcx.struts2.converters.DateConverter
第二种配置:全局,在src下新建xwork-conversion.properties
java.util.Date=com.hcx.struts2.converters.DateConverter
注意:如果将dateformart格式信息写入web.xml中,第二种配置时,会读取不到, 因为DateConverter构造器调用在读取web.xml参数之前。
<context-param>
<param-name>pattern</param-name>
<param-value>yyyy-MM-dd hh:mm:ss</param-value>
</context-param>
Converter类 修改为通过getDateFormat方法获取web.xml中的配置信息
public DateFormat getDateFormat(){
if(dateFormat == null){
//获取当前 WEB 应用的初始化参数 pattern
ServletContext servletContext = ServletActionContext.getServletContext();
System.out.println(servletContext);
String pattern = servletContext.getInitParameter("pattern");
dateFormat = new SimpleDateFormat(pattern);
}
return dateFormat;
}