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






















