Struts 2のタイプ変換器


htmlフォームのテキストボックスに入力した数値タイプも文字タイプも、最後にStringクラスでバックグラウンドに転送されます.バックグラウンドbeanのプロパティがint、doubleなどの場合、Struts 2は自動的に文字タイプを対応するタイプに変換します.ただし、日付タイプのような複雑なタイプでは、Struts 2は自動的にタイプ変換を行わないため、Converterクラスを作成してタイプ変換を行う必要があります.
 
Strutsには、ローカルタイプ変換器とグローバルタイプ変換器の2種類の変換器があります.
1.ローカルタイプ変換器:
タイプ変換器を作成するには、まず、TypeCoverterインタフェースを実装する変換クラスを作成するか、TypeCoverterインタフェースを実装するDefaultTypeConverter実装クラスを継承する必要があります.次に、日付タイプ変換についてDateTypeConverterクラスを作成します.コードは次のとおりです.
package com.struts.converter;

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

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

public class DateTypeConverter extends DefaultTypeConverter {
	public Object convertValue(Map<String, Object> context, Object value, Class toType) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
		try {
			if(toType == Date.class) {	// 
				String[] params = (String[]) value;  //request.getParameterValues();
				return dateFormat.parse(params[0]);
			} else if(toType == String.class) {	 // 
				Date date = (Date) value;
				return dateFormat.format(date);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}

次にタイプ変換器を登録しpropertiesファイルを作成する必要があります
名前の形式は:actionName-conversion.properties,actionNameはあなたのタイプ変換が必要なactionのクラス名で、後は固定フォーマットです.
コンテンツフォーマットは、変換属性=変換処理クラス、例えばbirthday=com.struts.converter.DateTypeConverter,変換処理クラスにはパッケージ名が必要であることに注意し,最後にそのファイルをそれに対応するactionクラスの同じパッケージの下に置く.
 
2.グローバルタイプ変換器:
ローカルタイプ変換器は、同じパッケージのactionクラスでのみ機能します.すべての日付タイプを変換するには、グローバルタイプ変換器を使用する必要があります.グローバルに必要なクラスはローカルタイプと同じです.
名前の形式は:xwork-conversion.properties、これは固定フォーマットです
内容フォーマットは、beanクラス=変換処理クラス、例えばjava.util.Date=com.struts.converter.DateTypeConverter、最後にこのファイルをsrcルートディレクトリの下に置くと、最後にコンバータの処理フローを添付できます.
(1)入力:HTMLフォーム発行-Actionクラス処理-属性setterメソッドの実行-タイプ変換が必要な場合-propertiesファイルを見つけ-properties設定に従って対応する変換クラスを見つけ、変換器を呼び出し-戻り値をsetterメソッドでactionの属性に割り当てます.(2)出力:Actionクラス処理-属性getterメソッドを実行-タイプ変換が必要な場合-propertiesファイルを見つける-properties設定に従って対応する変換クラスを見つけ、変換器を呼び出す-戻り値をgetterメソッドでページに出力する.