在Jsp项目中,很多时候需要用到字符串到日期类型的转化,一般有两种方法处理:
1、在useBean的Model中的set方法的参数为字符串类型,在set方法中将字符串转化为日期类型,然后赋值给日期字段,不过这种方式限制的Model的使用场合,不利于重用。
2、通过java.beans.PropertyEditorManager的registerEditor方法,注册一个我们自定义的针对字符串转化为日期的类,这个类需要继承自PropertyEditorSupport类。这种方法处理过后,就可以实现字符串类型自动转化为日期型了,一定程度上增强了Bean的重用,不过也有它的确定,比如在整个项目中要设定统一的时间字符串格式,当然你也可以把字符串转化器做的强大一点,让它支持所有的日期格式,。
第一中方式实现较为方便,下面就针对第二种方式的实现做一下介绍,过程很简单:
首先,创建一个DatePropertyEditor类,使其继承自java.beans.PropertyEditorSupport类,然后重载它的getValue和setAsText方法,示例代码如下:
/**
*
*/
package com.zywang.util;
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* JSP:userBean中字符串转化为时间类型
* @author ZYWANG 2009-6-20
*/
public class DatePropertyEditor extends PropertyEditorSupport {
private Date date = null;
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
/*
* (non-Javadoc)
*
* @see java.beans.PropertyEditorSupport#getValue()
*/
@Override
public Date getValue() {
return date;
}
/*
* (non-Javadoc)
*
* @see java.beans.PropertyEditorSupport#setAsText(java.lang.String)
*/
@Override
public void setAsText(String text) throws IllegalArgumentException {
try {
date = dateFormat.parse(text);
} catch (ParseException e) {
date = null;
}
}
}
然后,使用java.beans.PropertyEditorManager的registerEditor方法将其注册进来
java.beans.PropertyEditorManager.registerEditor(java.util.Date.class, DatePropertyEditor.class);
该方法的第一个参数为我们要被编辑类型的 Class 对象 ,第二个参数为 编辑器类的 Class 对象,大家可以通过查看JDK的文档查找相关的方法说明
另外再说一点,在实际项目中为了操作方便,建议在过滤器中注册这个编辑器类,如下程序过滤器实现了两个功能,一是统一了编码格式,二是注册了我们的时间转化的编辑器。示例代码如下:
package com.zywang.util;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* JSP页面乱码处理过滤器
* @author ZYWANG 2009-6-20
* Servlet Filter implementation class ChangeEncoding
*/
public class SetCharacterEncodingFilter implements Filter {
/**
* Default constructor.
*/
public SetCharacterEncodingFilter() {
}
/**
* @see Filter#destroy()
*/
public void destroy() {
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// place your code here
request.setCharacterEncoding("GB18030");
// pass the request along the filter chain
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
//注册JavaBean日期转化器
java.beans.PropertyEditorManager.registerEditor(java.util.Date.class, DatePropertyEditor.class);
}
}
附件为一个演示用的DEMO,欢迎大家指正!