在Action中通過(guò)代碼執(zhí)行數(shù)據(jù)校驗(yàn)
請(qǐng)求參數(shù)的輸入校驗(yàn)途徑一般分兩種:客戶端校驗(yàn) :通過(guò)JavaScript 完成 (jquery validation插件),目的:過(guò)濾正常用戶的誤操作。
服務(wù)器校驗(yàn) :通過(guò)java代碼完成 ,目的:整個(gè)應(yīng)用阻止非法數(shù)據(jù)的最后防線
列如:
<h1>登錄:請(qǐng)求數(shù)據(jù)校驗(yàn)--代碼手動(dòng)校驗(yàn)</h1> <s:fielderror/> <form action="${pageContext.request.contextPath }/login.action" method="post"> 用戶名:<input type="text" name="username"/><s:fielderror fieldName="username" /><br/> 密 碼:<input type="password" name="password"/><br/> <input type="submit" value="登錄"/> </form>
1.全局校驗(yàn) (對(duì)當(dāng)前Action的所有方法進(jìn)行校驗(yàn) )
如果要執(zhí)行校驗(yàn) ,Action必須繼承ActionSupport 類 (因?yàn)樗鼘?shí)現(xiàn) Validateable接口)
//手動(dòng)校驗(yàn)public void validate() {//StringUtils.isBlank()方法判斷輸入是否為空 if(StringUtils.isBlank(username)){ /*將錯(cuò)誤信息寫入Map<String,List<String>> fieldErrors; 當(dāng)遇到workflow攔截器時(shí),會(huì)判斷錯(cuò)誤集合的size的大于0, 如果大于0,則向input的視圖跳轉(zhuǎn)*/ super.addFieldError("username", "用戶不能為空"); } }
StringUtils 方法的操作對(duì)象是 java.lang.String 類型的對(duì)象,是 JDK 提供的 String 類型操作方法的補(bǔ)充,并且是 null 安全的(即如果輸入?yún)?shù)
String 為 null則不會(huì)拋出 NullPointerException ,而是做了相應(yīng)處理。
JSP顯示錯(cuò)誤信息
配置Struts2的特有標(biāo)簽S標(biāo)簽
在jsp增加顯示錯(cuò)誤信息 <s:fielderror />
校驗(yàn)機(jī)制原理分析:
2.局部校驗(yàn) (校驗(yàn)Action中指定業(yè)務(wù)方法—校驗(yàn)一個(gè)方法 )
在Action 添加 validateXxx 方法(約定), 這里XXX 是要校驗(yàn)?zāi)繕?biāo)方法名 (只會(huì)對(duì)指定方法校驗(yàn))
提示:
1.被校驗(yàn)方法首字母 要大寫。
2.全局校驗(yàn)一直會(huì)執(zhí)行,即使有局部校驗(yàn)。且先走的局部校驗(yàn)。
-----------------------------------------------------------------------------------------------------------------------------
基于XML配置實(shí)現(xiàn)校驗(yàn)
1. 全局校驗(yàn) (校驗(yàn)當(dāng)前Action 所有方法-是針對(duì)某一個(gè)action中的所有方法)----在Action類所在包,創(chuàng)建 Action類名-validation.xml
JSP頁(yè)面同上
Action代碼: Action 必須繼承ActionSupport 類 (為了實(shí)現(xiàn) Validateable接口 )
public class LoginAction extends ActionSupport { private static final long serialVersionUID = 1L; private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String execute() throws Exception { System.out.println(this); return INPUT; } @Override public String toString() { return "LoginAction [username=" + username + ", password=" + password + "]"; }
XML代碼:(必須和 action在容一個(gè)包下,Action類名-validation.xml)
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <!-- 校驗(yàn)用戶 --> <field name="username"> <field-validator type="requiredstring"> <message>用戶不能為空</message> </field-validator> </field> <!-- 校驗(yàn)密碼 --> <field name="password"> <field-validator type="requiredstring"> <message>密碼不能為空</message> </field-validator> </field> </validators>
局部校驗(yàn) (校驗(yàn)當(dāng)前Action 指定方法 )
在Action類所在包,創(chuàng)建 Action類名-<action>name屬性-validation.xml
JSP頁(yè)面代碼:
<h1>登錄:請(qǐng)求數(shù)據(jù)校驗(yàn)--xml配置校驗(yàn)--局部</h1> <s:fielderror/> <form action="${pageContext.request.contextPath }/login3.action" method="post"> 用戶名:<input type="text" name="username"/>(非空,且長(zhǎng)度為3-10位)<br/> 密 碼:<input type="password" name="password"/>(必須,且長(zhǎng)度為6-12)<br/> 重復(fù)密碼:<input type="password" name="repassword"/>(必須和密碼一致)<br/> 年齡:<input type="text" name="age"/>(數(shù)字,且必須是18-100)<br/> 手機(jī)號(hào)碼:<input type="text" name="mobile"/>(手機(jī)號(hào)規(guī)則,11位數(shù)字)<br/> 郵箱:<input type="text" name="email"/>(郵箱格式)<br/> <input type="submit" value="登錄"/> </form>
Action代碼:
public class User2Action extends ActionSupport{ private static final long serialVersionUID = 1L; private String username; private String password; private String repassword; private int age; private String mobile; private String email; public String login2(){ System.out.println(this); return NONE; }/* GET和SET 方法略去............... toString方法略去..................*/
XML代碼:
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"><validators> <field name="username"> <field-validator type="stringlength"> <param name="minLength">3</param> <param name="maxLength">10</param> <message>用戶名必須在3-10位</message> </field-validator> </field> <field name="password"> <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">12</param> <message>密碼必須在6-12位</message> </field-validator> </field> <field name="repassword"> <field-validator type="fieldexpression"> <param name="expression">password==repassword</param> <message>兩次輸入密碼不一致</message> </field-validator> </field> <field name="age"> <field-validator type="int"> <param name="min">18</param> <param name="max">100</param> <message>年齡必須是18-100</message> </field-validator> </field> <field name="mobile"> <field-validator type="regex"> <param name="regex"><![CDATA[^1[3|5|8|4]\d{9}$]]></param> <message>用戶名必須在3-10位</message> </field-validator> </field> <field name="email"> <field-validator type="email"> <message>郵箱格式不正確</message> </field-validator> </field></validators>
如果檢測(cè)錯(cuò)誤Action會(huì)自動(dòng)跳轉(zhuǎn)到input視圖。
其他校驗(yàn)器可參考: