概述css
從一個 HTML 表單到一個 Action 對象, 類型轉換是從字符串到非字符串.
HTTP 沒有 「類型」 的概念. 每一項表單輸入只多是一個字符串或一個字符串數組. 在服務器端, 必須把 String 轉換爲特定的數據類型
在 struts2 中, 把請求參數映射到 action 屬性的工做由 Parameters 攔截器負責, 它是默認的 defaultStack 攔截器中的一員. Parameters 攔截器能夠自動完成字符串和基本數據類型之間轉換.數組
類型轉換錯誤服務器
若是類型轉換失敗:
若 Action 類沒有實現 ValidationAware 接口: Struts 在遇到類型轉換錯誤時仍會繼續調用其 Action 方法, 就好像什麼都沒發生同樣.
若 Action 類實現 ValidationAware 接口:Struts 在遇到類型轉換錯誤時將不會繼續調用其 Action 方法: Struts 將檢查相關 action 元素的聲明是否包含着一個 name=input 的 result. 若是有, Struts 將把控制權轉交給那個 result 元素; 若沒有 input 結果, Struts 將拋出一個異常spa
類型轉換錯誤消息的定製debug
做爲默認的 default 攔截器的一員, ConversionError 攔截器負責添加與類型轉換有關的出錯消息(前提: Action 類必須實現了 ValidationAware 接口)和保存各請求參數的原始值.
若字段標籤使用的不是 simple 主題, 則非法輸入字段將致使一條有着如下格式的出錯消息:對象
覆蓋默認的出錯消息
在對應的 Action 類所在的包中新建 ActionClassName.properties 文件, ClassName 即爲包含着輸入字段的 Action 類的類名
在屬性文件中添加以下鍵值對:
定製出錯消息的樣式:
每一條出錯消息都被打包在一個 HTML span 元素裏, 能夠經過覆蓋其行標爲 errorMessage 的那個 css 樣式來改變出錯消息的格式.
顯示錯誤消息: 若是是 simple 主題, 能夠經過 <s:fielderror fieldName=「filedname」></s:fielderror> 標籤顯示錯誤消息接口
<!--
問題1: 如何覆蓋默認的錯誤消息?字符串
1). 在對應的 Action 類所在的包中新建
ActionClassName.properties 文件, ActionClassName 即爲包含着輸入字段的 Action 類的類名
2). 在屬性文件中添加以下鍵值對: invalid.fieldvalue.fieldName=xxx
問題2: 若是是 simple 主題, 還會自動顯示錯誤消息嗎? 若是不會顯示, 怎麼辦 ?input
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 部分便可. io