1 <s:debug></s:debug>2 3 <s:form action="testConversion">4 <s:textfield name="age" label="Age"></s:textfield>5 <br><br>6 <s:submit></s:submit>7 </s:form>
2)java主要代碼如下:
1 package com.atguigu.struts2.app; 2 3 import com.opensymphony.xwork2.ActionSupport; 4 5 public class ConversionAction extends ActionSupport{ 6 7 PRivate int age; 8 9 public int getAge() {10 return age;11 }12 13 public void setAge(int age) {14 this.age = age;15 }16 17 public String execute(){18 System.out.println("age: " + age);19 return "success";20 }21 22 }
3)struts.xml基本配置如下:
<package name="default" namespace="/" extends="struts-default"> <action name="testConversion" class="com.atguigu.struts2.app.ConversionAction"> <result>/success.jsp</result> <result name="input">/index.jsp</result> </action> </package>
將項目發布后運行,當我們輸入非整數字符提交后的運行結果如下圖:
1). 在對應的 Action 類所在的包中新建ActionClassName.properties 屬性文件, ActionClassName 即為包含著輸入字段的 Action 類的類名2). 在屬性文件中添加如下鍵值對: invalid.fieldvalue.fieldName=custom error message。(注意:在這里只是寫出了字段名,并沒有寫Action的名稱,因為通過properties文件名已經可以定位到Action對象了。)
示例二:
為示例一添加屬性文件:ConversionAction.properties,并在文件中提交鍵值對:invalid.fieldvalue.age=/u9519/u8BEF/u7684/u5E74/u9F84/u683C/u5F0F.(即“錯誤的年齡格式.”)
運行結果如下圖:
問題2: 如果是 simple 主題, 還會自動顯示錯誤消息嗎? 如果不會顯示, 怎么辦 ?
修改主題為simple后,可以看到此時不能自動的顯示錯誤消息,因此,我們可以通過下述方法來顯示錯誤消息:
1). 通過 debug 標簽,可知若轉換出錯, 則在值棧的 Action(實現了 ValidationAware 接口) 對象中有一個 fieldErrors 屬性,該屬性的類型為 Map<String, List<String>>(通過Debug標簽中的fieldErrors屬性格式初步判斷其為數組類型或集合類型,之后可以在ActionSupport中的set/getFieldErrors方法中進一步驗證其類型),其中鍵: 字段(屬性名), 值: 錯誤消息組成的 List。 所以可以使用 EL 或 OGNL 的方式來顯示錯誤消息: ${fieldErrors.age[0]}2). 還可以使用 s:fielderror 標簽來顯示,可以通過 fieldName 屬性顯示指定字段的錯誤。
示例三: 修改示例一中的JSP頁面代碼如下:1 <s:form action="testConversion" theme="simple">2 Age: <s:textfield name="age" label="Age"></s:textfield>3 ${fieldErrors.age[0]}4 <s:fielderror fieldName="age"></s:fielderror>5 <br><br>6 <s:submit></s:submit>7 </s:form>
運行結果如下圖:
問題3: 若是 simple 主題,且使用 <s:fielderror fieldName="age"></s:fielderror>標簽來顯示錯誤消息,則該消息在一個 ul, li, span 中。 如何去除 ul, li, span 呢 ?
思路一:由于每一條出錯消息都被打包在一個 HTML span 元素里, 可以通過覆蓋其行標為 errorMessage 的那個 CSS 樣式來改變出錯消息的格式。但是這種方法不利于我們系統整體樣式的維護。
★★★思路二:在 Struts2的template.simple包下面的 fielderror.ftl 文件里定義了 simple 主題下 s:fielderror 標簽顯示錯誤消息的樣式,所以修改該配置文件即可。 ★★★修改模板的方法:在 src 下新建 template.simple 包, 新建 fielderror.ftl 文件,把原生的 fielderror.ftl 中的內容復制到新建的 fielderror.ftl 中,然后剔除 ul, li, span 部分即可。
新聞熱點
疑難解答