Struts 1.xのタイプ変換器


Struts 1.xには、タイプ変換器の機能があります.
たとえば、booleanタイプのプロパティを宣言します.このプロパティの値をYes、1、on、Yなどに設定すると、Strutsは自動的にTrueタイプに変換します.
しかし、一部のタイプのStrutsは変換できません.
例えばDateタイプの変換:
*javaの場合.sql.Date、ページの日付フォーマットはyyyy-mm-ddでなければ変換できません
*javaの場合.util.Date、デフォルトではStrutsは変換できません.
解決策は、カスタムタイプの変換器を設計することです.
カスタムタイプ変換器の実装手順:
1.Strutsのconverterインタフェースを実装し、そのconvertメソッドを実装する.

package com.yx.zzg.struts;

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

import org.apache.commons.beanutils.Converter;

/**
 * java.util.Date     
 * @author Administrator
 *
 */
public class UtilDateConverter implements Converter {

	public Object convert(Class type, Object value) {
		System.out.println("UtilDateConverter.value=" + value);
		if (value == null) {
			return value;
		}
		if (value instanceof Date) {
			return value;
		}
		Date d = null;
		if (value instanceof String) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			try {
				d = sdf.parse((String)value);
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return d;
	}

}

2.カスタムタイプ変換器を登録します.つまり、カスタムタイプ変換器をStrutsのタイプ変換器に登録します.
通常、登録を実現する2つの方法クラスがあります.
第1の方法はサーブレット方式を採用する.
1.まずサーブレットを定義し、そのinitメソッドを上書きする

package com.yx.zzg.struts;

import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.apache.commons.beanutils.ConvertUtils;

/**
 *   java.util.date   
 * @author Administrator
 *
 */
public class UtilDateConverterInitWithServlet extends HttpServlet {

	@Override
	public void init() throws ServletException {
		System.out.println("UtilDateConverterInitWithServlet.init()");
		//          
                ConvertUtils.register(new UtilDateConverter(), Date.class);
	}

}

2.次にwebを構成する.xmlファイルの登録が完了しました.

<servlet>
  	<servlet-name>UtilDateConverterInitWithServlet</servlet-name>
  	<servlet-class>com.yx.zzg.struts.UtilDateConverterInitWithServlet</servlet-class>
  	<load-on-startup>3</load-on-startup>
  </servlet>

第2の方式はStruts自身が提供するpluginの方式を採用する
1.まずクラスを定義し、PlugInインタフェースを実装し、その方法を実装する.

package com.yx.zzg.struts;

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;

public class UtilDateConverterInitWithPlugin implements PlugIn {

	public void destroy() {
	}

	public void init(ActionServlet servlet, ModuleConfig config)
			throws ServletException {
		System.out.println("UtilDateConverterInitWithPlugin.init()");
		ConvertUtils.register(new UtilDateConverter(), Date.class);
	}
}

2.次にstruts-configを構成する.xmlファイルの登録が完了しました

<plug-in className="com.yx.zzg.struts.UtilDateConverterInitWithPlugin"/>