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メソッドを実装する.
2.カスタムタイプ変換器を登録します.つまり、カスタムタイプ変換器をStrutsのタイプ変換器に登録します.
通常、登録を実現する2つの方法クラスがあります.
第1の方法はサーブレット方式を採用する.
1.まずサーブレットを定義し、そのinitメソッドを上書きする
2.次にwebを構成する.xmlファイルの登録が完了しました.
第2の方式はStruts自身が提供するpluginの方式を採用する
1.まずクラスを定義し、PlugInインタフェースを実装し、その方法を実装する.
2.次にstruts-configを構成する.xmlファイルの登録が完了しました
たとえば、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"/>