Jsp:useBean中字符串转化为Date类型的操作方法

在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,欢迎大家指正! 

你可能感兴趣的:(java,jdk,jsp,bean,servlet)