1. 程式人生 > >Struts2自定義型別轉換器

Struts2自定義型別轉換器

package com.loaderman.d_type;

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

import org.apache.struts2.util.StrutsTypeConverter;

/**
 * 自定義型別轉換器類
*/
public class MyConverter extends StrutsTypeConverter {

    
// 新需求: 要求專案中要支援的格式,如: yyyy-MM-dd/yyyyMMdd/yyyy年MM月dd日.. // 先定義專案中支援的轉換的格式 DateFormat[] df = { new SimpleDateFormat("yyyy-MM-dd"), new SimpleDateFormat("yyyyMMdd"), new SimpleDateFormat("yyyy年MM月dd日") }; /** * 把String轉換為指定的型別 【String To Date】 * *
@param context * 當前上下文環境 * @param values * jsp表單提交的字串的值 * @param toClass * 要轉換為的目標型別 */ @Override public Object convertFromString(Map context, String[] values, Class toClass) { // 判斷: 內容不能為空 if (values == null
|| values.length == 0) { return null; } // 判斷型別必須為Date if (Date.class != toClass) { return null; } // 迭代:轉換失敗繼續下一個格式的轉換; 轉換成功就直接返回 for (int i=0; i<df.length; i++) { try { return df[i].parse(values[0]); } catch (ParseException e) { continue; } } return null; } @Override public String convertToString(Map context, Object o) { return null; } }


Struts2中如何自定義型別轉換器?
      介面 實現類
Struts2中如何配置自定義轉換器?

      1、自定義轉換器繼承StrutsTypeConverter
      2、重寫convertFromString和convertToString方法
      3、註冊轉換器
            3.1 在Action所在包中建立
                   Action名-conversion.properties
            3.2 在3.1檔案中新增以下資料
                   需要轉換的欄位名=自定義轉換器類的許可權定名
          birthday=cn.itcast.convertor.DateTypeConvertor

總結

      以上的轉換器註冊時候是與Action的名字相耦合的,因此只能在自己的Action中內部使 用,稱之為區域性轉換器註冊方式。

Struts2中如何自定義全域性型別轉換器?
      實現的介面和繼承的類都是相同的,本質上就是配置的方式不同。
實現
    

 1、自定義轉換器繼承StrutsTypeConverter
      2、重寫convertFromString和convertToString方法
      3、註冊轉換器
            3.1 在專案src目錄下建立以下固定檔案
                   xwork-conversion.properties   
            3.2 在3.1檔案中新增以下資料
                   需要轉換的類型別=轉換器類的許可權定名
                   如:  java.util.Date= cn.itcast.converter.DateConverter

總結

       該攔截器負責對錯誤資訊進行攔截器 <interceptor name="conversionError“ class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>

Struts2中區域性和全域性轉換器的註冊檔名為什麼是固定的?

      1、struts-default.xml
       <interceptor name="conversionError" class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>
      2、StrutsConversionErrorInterceptor原始碼
      3、2的父類ConversionErrorInterceptor原始碼
      4、intercept()方法中的XWorkConverter原始碼
      5、 XWorkConverter