Strutでのコンバータの使用


Struts1.xで変換できるタイプのデフォルトでは、次のことがサポートされています.
 
BigDecimal、BigInteger、Boolean、Byte、Character、Double、Float、Integer、Long、Short、java.sql.dateといういくつかのタイプ.
 
通常、フォームを介してActionFormにデータを渡すのは文字列Stringタイプであり、Strutはフォームをコミットしたデータに基づいて自動的にActionFormで定義されたデータ型に変換されます.
 
たとえば、ActionFormでNumber整数型のプロパティを定義し、フォームを介して数値を渡し、フォームを文字列に渡します.Strutsは自動的に対応するデータ型--整数型に変換し、ActionFormに値を割り当てます.
 
上記のタイプのStrutsを渡すと、自動的に完了します.
 
ActionFormでjavaを定義するとutil.Dateタイプのデータ行では、Strutsはこのタイプに変換できず、異常を放出します.
 
次のように変換器を定義する必要があります.
 
方法1:
 
1、実現org.apache.commons.beanutils.Converterインタフェース、そのconvert方法を実現して、この方法体の中で変換を実行して、この方法は1つのObjectタイプを返して、2つのパラメータを伝達して、1つはClassタイプtypeで、1つはObjectタイプ値valueで、Object値valueは私達が伝達して変換する必要があるパラメータで、コードは以下の通りです:
 
		//         
		if (value == null) {
			return value;
		}
		
		//    java.util.Date      
		if (value instanceof Date) {
			return value;
		}
		
		//     Date(   java.util.Date ,  sql    )
		Date date = null;
		//         ,   Date  
		if (value instanceof String) {
			//                  ,                 
			SimpleDateFormat sFormat = new SimpleDateFormat("yyyy-MM-dd");
			try {
				date = sFormat.parse((String)value);
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return date;

 
 
 
 
2、convertメソッドが書き終わったら、新しいサーブレット継承Httpサーブレットを作成し、彼の初期化メソッドinit()を複写して登録します.コードは以下の通りです.
 
ConvertUtils.register(new UtilDateConvert(), Date.class);

 
 
 
3、それからwebを配置する.xmlプロファイル、コードは次のとおりです.
    
  <servlet>
  	<servlet-name>Servlet  </servlet-name>
  	<servlet-class>Servlet    </servlet-class>
  	<!--   Servlet   tomcat       (    )
  	<load-on-startup>3</load-on-startup>
  </servlet>

 
 
 
 
これにより、カスタムコンバータ全体の手順が完了します.
 
方法2:
     
1、同様にorgを実現する.apache.commons.beanutils.Converterインタフェースは,そのconvertメソッドを実現し,このメソッド体クラスで変換を行い,コードはメソッドと同じである.
    
2、登録方法、PlugInインタフェースを実現し、彼女の初期化方法init()に変換器を登録し、コードは方法と同じである.
 
3、struts-configを配置する.xmlファイル、コードは次のとおりです.
     
<plug-in className="  PlugIn        " />

これでStrut 1が完成する.xカスタムコンバータ
 
メソッド1とメソッド2の実行の効果は同じで,登録実装の方法が異なるだけである.
 
Strutsフレームワークで開発する場合は、2つ目を使うことをお勧めします.個人的には良い感じがするはずです.結局、PlunInはStrutsのクラスなので、結合は緊密にしなければなりません.