7.類型轉換、消息處理與國際化
@(10_Struts2)[JavaEE, Struts2]
- 前邊我們說過了 Http協(xié)議 有兩個缺陷一個是無狀態(tài)、一個是純文本。
- 純文本也就是說Http請求中的內容都是以字符串的形式發(fā)送的。
- 但是Java又是一個強類型語言,所以將一個字符串轉換成Java中的數(shù)據(jù)類型這一重任就落在了Struts2的肩膀上。
- 類型轉換最常見的可能就是將將10/29/2015轉換為一個date類型等。
- 關于類型轉換我們要做的主要有兩件事:
- 類型轉換失敗后的處理。
- 特殊類型的自定義類型轉換器。
類型轉換失敗消息處理
-
類型轉換失敗:
若 Action 類沒有實現(xiàn) ValidationAware 接口: Struts 在遇到類型轉換錯誤時仍會繼續(xù)調用其 Action 方法, 就好像什么都沒發(fā)生一樣.
-
若 Action 類實現(xiàn) ValidationAware 接口:Struts 在遇到類型轉換錯誤時將不會繼續(xù)調用其 Action 方法:
- Struts 將檢查相關 action 元素的聲明是否包含著一個 name=input 的 result.
- 如果有, Struts 將把控制權轉交給那個 result 元素;
- 若沒有 input 結果, Struts 將拋出一個異常
實現(xiàn)
ValidationAware接口,在之前的文章中我們提到,我們可以繼承com.opensymphony.xwork2.ActionSupport類的形式來實現(xiàn)ValidationAware接口, 在ActionSupport 中已經幫我們實現(xiàn)好了
-
類型轉換出錯時如何處理
- 如果我們輸入錯誤的數(shù)字,想轉換為年齡;當我們的 result name="input" 的時候,會返回到這個結果頁面。
- 錯誤的年齡
- 但是對于這種錯誤的提示,我們需要處理
-
類型轉換錯誤消息的定制
- 作為默認的 default 攔截器的一員, ConversionError 攔截器負責添加與類型轉換有關的出錯消息(前提: Action 類必須實現(xiàn)了 ValidationAware 接口)和保存各請求參數(shù)的原始值.
- 若字段標簽使用的不是 simple 主題, 則非法輸入字段將導致一條有著如上圖格式的出錯消息。
-
覆蓋默認的出錯消息
- 在對應的
Action類所在的包中新建ActionClassName.properties文件, ClassName 即為包含著輸入字段的 Action 類的類名 - 在屬性文件中添加如下鍵值對: invalid.fieldvalue.fieldName=Customer Message
- 在對應的
# EmployeeAction.properties
invalid.fieldvalue.age=年齡格式不正確,請重新輸入!
- 自定義的消息
-
定制出錯消息的樣式:
- 每一條出錯消息都被打包在一個 HTML span 元素里, 可以通過覆蓋其行標為 errorMessage 的那個 css 樣式來改變出錯消息的格式.
- 顯示錯誤消息: 如果是 simple 主題, 可以通過
<s:fielderror fieldName=“filedname”></s:fielderror>標簽顯示錯誤消息 - 通過s:fielderror 標簽
<s:form action="emp_update" theme="simple">
<s:hidden name="id"></s:hidden>
姓名:<s:textfield name="name"></s:textfield> <br>
年齡:<s:textfield name="age" ></s:textfield>
<!-- 通過標簽獲取錯誤消息 -->
<span style="color:red"><s:fielderror fieldName="age"></s:fielderror></span><br>
部門: <s:textfield name="dept"></s:textfield><br>
職務:<s:textfield name="role"></s:textfield><br>
<s:submit value="修改"></s:submit>
</s:form>
- 但是對于這種錯誤消息的格式我們是可以修改的,修改其默認的 freemark 模板
- 在struts2-core-2.3.15.3.jar 的 /template/simple/fielderror.ftl,這是 struts2 默認自帶的錯誤消息模板,我們在 src 路徑下建立相同的包和模板,并且修改里面的 html 標簽。刪除文件中錯誤消息的 的 ul、li、span便簽






















