struts2中提供的型別轉換
阿新 • • 發佈:2018-12-14
在web中我們使用beanutils直接將表單資料封裝到javaBean中。—型別轉換
struts2中action得到請求引數,也可以直接封裝到javaBean. struts2 內部提供大量型別轉換器,用來完成資料型別轉換問題 boolean 和 Boolean char和 Character int 和 Integer long 和 Long float 和 Float double 和 Double Date 可以接收 yyyy-MM-dd格式字串 陣列 可以將多個同名引數,轉換到陣列中 集合 支援將資料儲存到 List 或者 Map 集合 例如:日期型別,我們傳遞 yyyy-MM-dd yyyy年MM月dd日格式都可以,但是如果是yyyy/MM/dd 就會出現問題. 關於struts2中的型別轉換器: struts2中的型別轉換器根介面是:com.opensymphony.xwork2.conversion.TypeConverter。 ------------------------------------------------------- 自定義型別轉換器: 步驟: 1.建立一個類實現TypeConverter介面. 2.重寫介面中方法,實現型別轉換操作. 3.註冊型別轉換器. 詳解說明: 1.建立一個自定義型別轉換器 1.實現TypeConverter需要重寫 public Object convertValue(Map<String, Object> context, Object target, Member member, String propertyName, Object value, Class toType); 如果實現介面,這個方法引數太多(6個) 2.不推薦實現介面,可以繼承 DefaultTypeConverter類 優點:重寫的方法引數沒有那麼多 public Object convertValue(Map<String, Object> context, Object value, Class toType) { return convertValue(value, toType); } 3.個人推薦使用 繼承DefaultTypeConverter類的一個子類StrutsTypeConverter. 原因:在這個類中將從頁面傳遞的資料怎樣封裝,以及action中的資料怎樣在頁面上顯示做了分離. public abstract Object convertFromString(Map context, String[] values, Class toClass); public abstract String convertToString(Map context, Object o); 2.怎樣註冊一個自定義型別轉換器. 1.區域性--針對於action 配置檔案所在位置以及名稱: 在Action類所在包 建立 Action類名-conversion.properties , 配置檔案書寫: 格式 : 屬性名稱=型別轉換器的全類名 2.區域性--針對於model 配置檔案所在位置以及名稱: 在model類所在包 建立 model類名-conversion.properties , 配置檔案書寫: 格式 : 屬性名稱=型別轉換器的全類名 3.全域性 配置檔案所在位置以及名稱:在src下建立一個xwork-conversion.properties 配置檔案書寫: 格式: 要轉換的型別全名=型別轉換器的全類名 java.util.Date=com.baidu.convert.MyConvert ----------------------------------------------------------------------------- 注意: 對於struts2中型別轉換器,如果表單資料提交時,將資料向model封裝,出現了問題,會報錯: No result defined for action com.baidu.action.RegistAction and result input 上面的意思是說,在RegistAction的配置中沒有配置input結果檢視. <action name="regist" class="com.baidu.action.RegistAction"> <result name="input">/success.jsp</result> </action> 如果配置了,出現型別轉換問題,就會跳轉到input指定的檢視。 問題:為什麼會向input檢視跳轉? 是因為struts2中的攔截器(interceptor). 在struts2中的 <interceptor name="conversionError" class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/> 用於記錄型別轉換問題 在struts2中 <interceptor name="workflow" class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"/> 用於得到問題,向input檢視跳轉。 關於錯誤資訊展示: 通過分析攔截器作用,得知當型別轉換出錯時,自動跳轉input檢視 ,在input檢視頁面中 <s:fieldError/> 顯示錯誤資訊 * 在Action所在包中,建立 ActionName.properties,在區域性資原始檔中配置提示資訊 : invalid.fieldvalue.屬性名= 錯誤資訊 如果是自定義型別轉換器,出現型別轉換問題,要跳轉到input檢視,在型別轉換器中,必須丟擲異常才可以。