Struts下的文本字符串和日期之间转换
在Struts中我们经常要处理用户录入的日期字符串,将其转换为java.util.Date类型。在这里我们提供两种方式来实现这样的转换。
1 在ActionForm子类中,创建两个变量来处理日期,一个为Date类型,一个为String类型(临时变量),我们使用String类型的变量来接受用户的录入,再编码将其转换为Date类型,在页面输出时,在根据Date类型生成自定义的文本格式。这种方式灵活性大,不过需要你多付出点劳动。
2 编写一个plugin实现自动转换。Struts下各种对象类型的转换是通过BeanUtils的Converter实现,所以我们只需向 BeanUtils注册一个日期字符转换的Converter即可,这种方式不需要你编写代码进行转换,不过在页面呈现的时候,你可能需要进行格式化,从 Date对象之间生产的字符串(toString())往往不是你需要的,使用JSTL就可以的。
首先编写一个日期转换的Converter类:
import java.text.SimpleDateFormat;import org.apache.commons.beanutils.Converter;import java.util.Set;import java.util.HashSet;import java.util.Iterator;import java.text.ParseException;/*** * 日期转换对象,使用该转换器,在BaseForm当中做一下注册,系统自动地帮助字符的日期表示转换为java.util.Date对象.* @author zizz.* Create Time:2006-9-11 19:11:47.*/public class DateConverter implements Converter { /** * 日期格式化对象. */ private static SimpleDateFormat df = new SimpleDateFormat(); /** * 模式集合. */ private static Set<String> patterns = new HashSet<String>(); //注册一下日期的转换格式 static{ DateConverter.patterns.add("yyyy-MM-dd"); DateConverter.patterns.add("yyyy-MM-dd HH:mm"); DateConverter.patterns.add("yyyy-MM-dd HH:mm:ss"); DateConverter.patterns.add("yyyy/MM/dd HH:mm:ss"); } /** * 日期转换器. * @param type Class * @param value Object * return Date Object. */ public Object convert(Class type,Object value){ if(value == null){ return null; }else if(value instanceof String){ Object dateObj = null; Iterator it = patterns.iterator(); while(it.hasNext()){ try{ String pattern = (String)it.next(); df.applyPattern(pattern); dateObj = df.parse((String)value); break; }catch(ParseException ex){ //do iterator continue } } return dateObj; }else{ return value; } }}
?
然后编写一个Struts的plugin,执行Converter注册:
public class ConvertPlugIn implements PlugIn { public void destroy() { ConvertUtils.deregister(); } public void init(ActionServlet arg0, ModuleConfig arg1) throws ServletException { ConvertUtils.register(new DateConverter(), Date.class); } }
?
最后在struts-config.xml进行plugin声明:
<plug-in className="DateConverter" />
进行日期转换,这对Struts来说是非常有益的。Struts的ActionForm一直被认为是设计的缺陷,但是通过BeanUtils可以快速实现 ActionForm、VO、PO对象之间的转换,这就要求ActionForm设计比较合理,当然在ActionForm中实现从采集字符串到日期的转换会节省很多时间,我们只需关注域对象间的转换就可以啦。