天天看點

Struts2.x 學習筆記 之 錯誤消息提示和定制

表現層資料涉及的兩個處理:資料校驗和類型轉換。

(1)簡介:

  struts2 提供了一個名為convertsionError的攔截器,這個攔截器被注冊在預設的攔截器棧中,檢視struts2架構的預設配置檔案struts-default.xml

Struts2.x 學習筆記 之 錯誤消息提示和定制

如果Struts2的類型轉換器還行類型轉換時出現錯誤,該攔截器将負責将對應錯誤封裝成表單域錯誤(FiledError),并将這些錯誤資訊放入ActionContext中

(2)出現的異常

當conversionError攔截器對轉換異常進行處理後,系統會跳轉到名為input的邏輯視圖

  若無會出現以下異常提示:

Struts2.x 學習筆記 之 錯誤消息提示和定制

(3)需要繼承ActionSupport

為了讓struts2類型轉換的錯誤處理機制生效,以及輸入校驗生效,都必須讓Action繼承Struts2的ActionSupport基類,因為strut2的ActionSupport負責收集類型轉換錯誤、輸入校驗錯誤、并将它們封裝成FieldError對象,添加到ActionContext中

Struts2.x 學習筆記 之 錯誤消息提示和定制

(4)修改提示資訊

顯示中文資訊,在國際化資源檔案中增加下面一行代碼

xwork.default.invalid.fieldvalue={0}字段類型轉換失敗!      

上面的資源檔案中包含了非西歐字元,是以必須使用native2ascii指令來處理該檔案

覆寫錯誤資訊。

Struts2.x 學習筆記 之 錯誤消息提示和定制

如果是 simple 主題, 還會自動顯示錯誤消息嗎? 如果不會顯示, 怎麼辦 ?

1). 通過 debug 标簽, 可知若轉換出錯, 則在值棧的 Action(實作了 ValidationAware 接口) 對象中有一個  fieldErrors 屬性.
該屬性的類型為 Map<String, List<String>> 鍵: 字段(屬性名), 值: 錯誤消息組成的 List. 是以可以使用 LE 或 OGNL 的方式
來顯示錯誤消息: ${fieldErrors.age[0]}

2). 還可以使用 s:fielderror 标簽來顯示. 可以通過 fieldName 屬性顯示指定字段的錯誤.

問題3. 若是 simple 主題, 且使用  <s:fielderror fieldName="age"></s:fielderror> 來顯示錯誤消息, 則該消息在一個 
ul, li, span 中. 如何去除 ul, li, span 呢 ?
在 template.simple 下面的 fielderror.ftl 定義了 simple 主題下, s:fielderror 标簽顯示錯誤消息的樣式. 是以修改該
配置檔案即可. 在 src 下建立  template.simple 包, 建立 fielderror.ftl 檔案, 把原生的 fielderror.ftl 中的内容
複制到建立的 fielderror.ftl 中, 然後剔除 ul, li, span 部分即可.       

繼續閱讀