struts2教程(5)--请求参数校验
一、請求參數(shù)校驗介紹
校驗的分類 :客戶端數(shù)據(jù)校驗 和服務器端數(shù)據(jù)校驗
客戶端數(shù)據(jù)校驗 ,通過JavaScript完成校驗 (改善用戶體驗,使用戶減少出錯 )
服務器數(shù)據(jù)校驗 ,使用框架內(nèi)置校驗功能(struts2 內(nèi)置校驗功能 )----- 必須的
struts2 支持校驗方式
代碼校驗 :在服務器端通過編寫java代碼,完成數(shù)據(jù)校驗
配置校驗 :XML配置校驗(主流) 和 注解配置校驗
二、手工代碼校驗請求參數(shù)
步驟一: 封裝數(shù)據(jù)
步驟二: 實現(xiàn)校驗Action,必須繼承ActionSupport類
步驟三: 覆蓋validate方法,完成對Action的業(yè)務方法 數(shù)據(jù)校驗
通過代碼邏輯判斷參數(shù)是否有效,如果參數(shù)非法 , this.addFieldError (ActionSupport提供)
workflow攔截器 跳轉(zhuǎn)回 input頁面
步驟四: 在jsp中 通過<s:fieldError/> 顯示錯誤信息
* validate方法會對Action中所有業(yè)務方法進行校驗,如果只想校驗某一個方法: validate方法名()
三、Xml配置方式數(shù)據(jù)校驗
XML配置方式 數(shù)據(jù)校驗
代碼校驗 不適用于大型項目, 流程數(shù)據(jù)復雜時,開發(fā)量和維護量都會很大
xml配置校驗原理 : 將很多校驗規(guī)則代碼已經(jīng)寫好,只需要在xml中定義數(shù)據(jù)所使用校驗規(guī)則就可以了
步驟一 :編寫jsp
步驟二 :編寫Action繼承ActionSupport或者 實現(xiàn) Validateable接口
步驟三 :封裝請求參數(shù)
使用xml校驗 必須提供get方法
步驟四 :編寫校驗規(guī)則xml文件
在Action所在包 編寫Action類名-validation.xml對Action所有業(yè)務方法進行校驗
引入DTD
------ xwork-core-2.3.7.jar 中 xwork-validator-1.0.3.dtd
<!DOCTYPE validators PUBLIC"-//Apache Struts//XWork Validator 1.0.3//EN""http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">內(nèi)置校驗器定義文件
xwork-core-2.3.7.jar 中 /com/opensymphony/xwork2/validator/validators/default.xml
內(nèi)建校驗器
?required (必填校驗器,要求被校驗的屬性值不能為null)
requiredstring (必填字符串校驗器,要求被校驗的屬性值不能為null,并且長度大于0,默認情況下會對字符串去前后空格)
?stringlength (字符串長度校驗器,要求被校驗的屬性值必須在指定的范圍內(nèi),否則校驗失敗,minLength參數(shù)指定最小長度,maxLength參數(shù)指定最大長度,trim參數(shù)指定校驗field之前是否去除字符串前后的空格)
?regex (正則表達式校驗器,檢查被校驗的屬性值是否匹配一個正則表達式,expression參數(shù)指定正則表達式,caseSensitive參數(shù)指定進行正則表達式匹配時,是否區(qū)分大小寫,默認值為true)
?int(整數(shù)校驗器,要求field的整數(shù)值必須在指定范圍內(nèi),min指定最小值,max指定最大值)
?double(雙精度浮點數(shù)校驗器,要求field的雙精度浮點數(shù)必須在指定范圍內(nèi),min指定最小值,max指定最大值)
?fieldexpression (字段OGNL表達式校驗器,要求field滿足一個ognl表達式,expression參數(shù)指定ognl表達式,該邏輯表達式基于ValueStack進行求值,返回true時校驗通過,否則不通過)
?email(郵件地址校驗器,要求如果被校驗的屬性值非空,則必須是合法的郵件地址)
?url(網(wǎng)址校驗器,要求如果被校驗的屬性值非空,則必須是合法的url地址)
?date(日期校驗器,要求field的日期值必須在指定范圍內(nèi),min指定最小值,max指定最大值)
案例
required 必填校驗器<field-validator type="required"><message>性別不能為空!</message></field-validator>requiredstring 必填字符串校驗器<field-validator type="requiredstring"><param name="trim">true</param><message>用戶名不能為空!</message></field-validator>stringlength:字符串長度校驗器<field-validator type="stringlength"><param name="maxLength">10</param><param name="minLength">2</param><param name="trim">true</param><message><![CDATA[產(chǎn)品名稱應在2-10個字符之間]]></message></field-validator>int:整數(shù)校驗器<field-validator type="int"><param name="min">1</param><param name="max">150</param><message>年齡必須在1-150之間</message></field-validator>date: 日期校驗器<field-validator type="date"><param name="min">1900-01-01</param><param name="max">2050-02-21</param><message>生日必須在${min}到${max}之間</message></field-validator>url: 網(wǎng)絡路徑校驗器<field-validator type="url"><message>傳智播客的主頁地址必須是一個有效網(wǎng)址</message></field-validator>email:郵件地址校驗器<field-validator type="email"><message>電子郵件地址無效</message></field-validator>regex:正則表達式校驗器<field-validator type="regex"><param name="regexExpression"><![CDATA[^13\d{9}$]]></param><message>手機號格式不正確!</message></field-validator>fieldexpression : 字段表達式校驗<field-validator type="fieldexpression"><param name="expression"><![CDATA[(password==repassword)]]></param><message>兩次密碼輸入不一致</message></field-validator>程序源代碼:
1、regist.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head><title>My JSP 'index.jsp' starting page</title></head><body><s:fielderror/><form action="${pageContext.request.contextPath}/regist" method="post">username:<input type="text" name="username"><s:fielderror fieldName="username.message"/><br>password:<input type="password" name="password"><s:fielderror fieldName="password.message"/><br>repassword:<input type="password" name="repassword"><br>hobby:<input type="checkbox" name="hobby" value="eat">吃<inputtype="checkbox" name="hobby" value="drink">喝<inputtype="checkbox" name="hobby" value="play">玩<br> age:<inputtype="text" name="age"><br> birthday:<input type="text"name="birthday"><br> email:<input type="text" name="email"><br>url:<input type="text" name="url"><br>telphone:<input type="text" name="telphone"><br> <input type="submit" value="注冊"></form> </body> </html>
 2、類型轉(zhuǎn)換類
 3、UserAction-regist-validation.xml
如何對指定的方法校驗
格式 ?Action類名-ActionName(<action>元素name屬性)-validation.xml
例如 : 校驗AddCustomerAction中execute方法 ?配置<action name="addcustomer" .../>校驗文件名字: AddCusotmerAction-addcustomer-validation.xml
四、自定義校驗規(guī)則
步驟一: 自定義校驗器 必須實現(xiàn) Validator ?接口
通常自定義校驗器 繼承 ValidatorSupport和 FieldValidatorSupport ?
? ValidatorSupport 針對不是一個輸入字段 (兩個密碼一致)
? FieldValidatorSupport 針對是一個輸入字段 ?(用戶名非空)
步驟二: 注冊校驗器
在工程的src下新建validators.xml文件
引入 xwork-core-2.3.7.jar 中 xwork-validator-config-1.0.dtd ?
步驟三 :使用校驗器
在Action所有包 創(chuàng)建Action類名-validation.xml
總結
以上是生活随笔為你收集整理的struts2教程(5)--请求参数校验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: struts2教程(4)--类型转换
 - 下一篇: struts2教程(6)--国际化处理