Struts中FormBean的日期類型字段賦值自動轉化

前面整理了Jsp中useBean中字符串和時間的轉化操作,然後到Struts中試了一下,發現,Struts中轉化時間用的不是java.beans.PropertyEditorManager,而是通過BeanUtil處理的,在網上找了一下,發現過程和前一篇中的差不多,只不過,繼承的類不一樣,註冊的方法不一樣了,下面看下處理的過程。

首先,創建DateConverter對象,使其繼承org.apache.commons.beanutils.Converter接口,簡單實現如下:

package com.zywang.util.extend;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.beanutils.Converter;

/**
 * @author ZYWANG 2009-6-22
 */
public class DateConverter implements Converter {

	private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
	/* (non-Javadoc)
	 * @see org.apache.commons.beanutils.Converter#convert(java.lang.Class, java.lang.Object)
	 */
	@Override
	public Date convert(Class arg0, Object arg1) {
		// TODO Auto-generated method stub
		if(arg1 instanceof String){
			try {
				return format.parse((String)arg1);
			} catch (ParseException e) {
				e.printStackTrace();
				return null;
			}
		}
		return null;
	}

}

 然後找個位置,比如上次我們在過濾器中init方法中註冊的,這次也可以在過濾器的init方法中註冊,註冊代碼如下:

package com.zywang.util.extend;

import java.io.IOException;
import java.util.Date;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.apache.commons.beanutils.ConvertUtils;

/**
 * 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);
		
		//註冊Struts的日期轉化對象
		ConvertUtils.register(new DateConverter(), Date.class);
	}

}

 使用這種方法就可以實現提交表單的數據的自動轉化爲日期類型了。

 

 另外在網上看到另外一種實現方法,這個方法首先需要創建DateConvertPlugIn對象,使其實現org.apache.struts.action.PlugIn接口,然後在改對象的init方法中註冊,最後再將該對象以插件的方式註冊到Struts中

DateConvertPlugIn的示例代碼如下:

/**
 * 
 */
package com.zywang.util.extend;

import java.util.Date;

import javax.servlet.ServletException;

import org.apache.commons.beanutils.ConvertUtils;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;

/**
 * @author ZYWANG 2009-6-22
 */
public class DateConvertPlugIn implements PlugIn {

	/* (non-Javadoc)
	 * @see org.apache.struts.action.PlugIn#destroy()
	 */
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		ConvertUtils.deregister(Date.class);
	}

	/* (non-Javadoc)
	 * @see org.apache.struts.action.PlugIn#init(org.apache.struts.action.ActionServlet, org.apache.struts.config.ModuleConfig)
	 */
	@Override
	public void init(ActionServlet arg0, ModuleConfig arg1)
			throws ServletException {
		// TODO Auto-generated method stub
		ConvertUtils.register(new DateConverter(), Date.class);
	}

}

 在Struts中註冊的代碼是:

 

<plug-in className="com.zywang.util.extend.DateConvertPlugIn"></plug-in>

 這樣也可以達到我們目的,但這兩種做法哪個更好,在下就搞不明白了。

 附件是我測試用的DEMO,實現了JavaBean中日期的轉化和Struts的FormBean中日期的轉化,及兩種Struts下注冊方法(插件方式、過濾器方式)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章