自定義類型轉換器,轉換過程當中的錯誤處理

 參數封裝過程當中,數據類型轉換問題
一、 struts2 內部提供大量類型轉換器,用來完成數據類型轉換問題
boolean 和 Boolean
char和 Character
int 和 Integer
long 和 Long
float 和 Float
double 和 Double
Date 能夠接收 yyyy-MM-dd格式字符串
數組  能夠將多個同名參數,轉換到數組中
集合  支持將數據保存到 List 或者 Map 集合java

案例: 輸入合法年齡和生日能夠自動轉換
當輸入abc 轉換爲 int類型 age時
  Caused by: java.lang.NoSuchMethodException: cn.itcast.struts2.demo3.CustomerAction.setAge([Ljava.lang.String;
 分析: 輸入20 ,轉換 int類型20  --- setAge(int)
       輸入abc,轉換int 出錯 ---- setAge(String) ----- 報錯方法不存在異常數組

二、 自定義類型轉換器 (瞭解)
 1) 自定義類型轉換器
  第一種 實現TypeConverter接口
   convertValue(java.util.Map<java.lang.String,java.lang.Object> context, java.lang.Object target, java.lang.reflect.Member member, java.lang.String propertyName, java.lang.Object value, java.lang.Class toType)
  第二種 繼承 DefaultTypeConverter
   convertValue(java.util.Map<java.lang.String,java.lang.Object> context, java.lang.Object value, java.lang.Class toType)
  第三種 繼承 StrutsTypeConverter
   convertFromString(java.util.Map context, java.lang.String[] values, java.lang.Class toClass)  --- 請求封裝
   convertToString(java.util.Map context, java.lang.Object o)   --- 數據回顯
   
 * 類型轉換器 一直都是雙向轉換
  頁面提交請求參數,封裝到model --- 須要轉換
  model數據 須要在頁面 回顯  ---- 須要轉換
  
 2) 以 1990/10/10 爲例,自定義日期轉換器,完成轉換
  public Object convertValue(Map<String, Object> context, Object value,
   Class toType) {
   // 根據toType判斷 是請求封裝 仍是 數據回顯
   DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
   if (toType == Date.class) {
    // 請求參數封裝 (value是字符串)
    String[] params = (String[]) value;
    String strVal = params[0]; // 轉換爲 日期類型
    try {
     return dateFormat.parse(strVal);
    } catch (ParseException e) {
     e.printStackTrace();
    }
   } else {
    // 回顯(value是 Date)
    Date date = (Date) value;
    return dateFormat.format(date);
   }服務器

   return null;
  }
  
 3) 註冊類型轉換器
  局部註冊 : 只對當前Action有效 (針對屬性)
  全局註冊 : 針對全部Action的日期類型有效 (針對類型 )
 
 局部註冊 : 在Action類所在包 建立 Action類名-conversion.properties , 格式 : 屬性名稱=類型轉換器的全類名
 代碼體現:Login-conversion.properties:birthday=類型轉換器全名
 全局註冊 : 在src下建立 xwork-conversion.properties ,格式 : 待轉換的類型=類型轉換器的全類名
 代碼體現:xwork-conversion.properties:java.util.Date=類型轉換器全名框架

 
三、 類型轉換中錯誤處理
1引入struts標籤:
<%@ taglib uri="/struts-tags" prefix="s"%>
2經過分析攔截器做用,得知當類型轉換出錯時,自動跳轉input視圖 ,在input視圖頁面中 <s:fieldError/> 顯示錯誤信息 
3* 在Action所在包中,建立 ActionName.properties,在局部資源文件中配置提示信息 : invalid.fieldvalue.屬性名= 錯誤信息(在name和value裏配置,可配置中文錯誤信息)orm

4. 請求數據有效性校驗
一、 校驗的分類 : 客戶端數據校驗 和 服務器端數據校驗
客戶端數據校驗 ,經過JavaScript 完成校驗 (改善用戶體驗,使用戶減小出錯 )
服務器數據校驗 ,使用框架內置校驗功能 (struts2 內置校驗功能 ) ----- 必須的繼承

二、 struts2 支持校驗方式
代碼校驗 :在服務器端經過編寫java代碼,完成數據校驗
配置校驗 :XML配置校驗(主流) 和 註解配置校驗接口

相關文章
相關標籤/搜索