Struts2的數據校驗屬于服務器端校驗,Struts2 支持校驗方式 :
1、手動校驗
1)Struts2的手動校驗步驟:
2)下面我們通過一個例子來演示手動校驗功能:
Action類:
1 public class ValidateAction extends ActionSupport { 2 PRivate String name; 3 4 @Override 5 public void validate() { 6 if (name == null || "".equals(name)) { 7 this.addFieldError("name", "姓名不能為空"); 8 } 9 }10 11 @Override12 public String execute() throws Exception {13 return SUCCESS;14 }15 16 public String getName() {17 return name;18 }19 20 public void setName(String name) {21 this.name = name;22 }23 }
struts.xml配置文件:
1 <struts> 2 <constant name="struts.devMode" value="true" /> 3 4 <package name="default" namespace="/" extends="struts-default"> 5 <action name="validateAction" class="com.sunny.action.ValidateAction"> 6 <result>/success.jsp</result> 7 <!--Struts2的校驗信息會返回到name值為input的視圖中--> 8 <result name="input">/input.jsp</result> 9 </action>10 </package>11 12 </struts>
jsp頁面:
1 <body>2 <s:fielderror name="name"/>3 <form action="${pageContext.servletContext.contextPath}/validateAction.action">4 姓名:<input type="text" name="name"><br>5 <input type="submit" value="提交">6 </form>7 </body>
當第一次加載jsp頁面時不會顯示校驗信息:
當在表單中不添加任何信息直接點擊提交按鈕時會顯示設置的校驗信息:
2、自動校驗(XML配置文件方式)
1)XML配置文件方式數據校驗步驟:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE validators PUBLIC 3 "-//Apache Struts//XWork Validator 1.0.3//EN" 4 "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> 5 <!--validators根元素--> 6 <validators> 7 <!--field:指定action中要校驗的屬性 8 name:指定將被驗證的表單字段的名字 9 -->10 <field name="name">11 <!--field-validator:指定驗證規則12 type:指定驗證規則的名稱13 -->14 <field-validator type="requiredstring">15 <!--param:向驗證器傳遞的參數,name值為校驗器的參數名 -->16 <param name="trim">true</param>17 <!--message:驗證失敗時,提示的錯誤信息18 里面的文本:錯誤提示信息19 -->20 <message>用戶名不能為空</message>21 </field-validator>22 </field>23 </validators>
Struts2的內置校驗器規則在路徑:xwork-core-x.x.x.jar中com.opensymphony.xwork2.validator.validators包的default.xml文件:
1 <validators> 2 <!--validator:聲明驗證規則 3 name:驗證規則的名稱 4 class:驗證規則對應的類的完整路徑 5 --> 6 <!--required:必填校驗器,要求被校驗的屬性值不能為null--> 7 <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/> 8 <!--requiredstring:必填字符串校驗器,要求被校驗的屬性值不能為null,并且長度大于0,默認情況下會對字符串去前后空格 9 參數trim:該參數為可選參數,用于指定是否在校驗之前對字符串進行整理。10 -->11 <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>12 <!--int:整數校驗器,要求field的整數值必須在指定范圍內13 參數min:指定字段值的最小值,該參數為可選14 參數max:指定字段值的最大值,該參數為可選15 -->16 <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>17 <!--long:整數校驗器,要求field的整數值必須在指定范圍內18 參數min:指定字段值的最小值,該參數為可選19 參數max:指定字段值的最大值,該參數為可選20 -->21 <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>22 <!--short:整數校驗器,要求field的整數值必須在指定范圍內23 參數min:指定字段值的最小值,該參數為可選24 參數max:指定字段值的最大值,該參數為可選 25 -->26 <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>27 <!--double:雙精度浮點數校驗器,要求field的雙精度浮點數必須在指定范圍內28 參數minInclusive:指定字段數值所接受的最小值,該參數為可選29 參數maxInclusive:指定字段數值所接受的最大值,該參數為可選30 參數minExclusive:指定字段數值被排除的最小值,該參數為可選31 參數maxExclusive:指定字段數值被排除的最大值,該參數為可選32 -->33 <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>34 <!--date:日期校驗器,要求field的日期值必須在指定范圍內35 參數min:指定字段日期值的最小值,該參數為可選36 參數max:指定字段日期值的最大值,該參數為可選37 -->38 <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>39 <!--expression:表達式校驗器,它是一個非字段校驗器,當參數expression計算的值為true時,校驗通過,否則返回提示.40 參數expression:該參數為一個邏輯表達式,該參數使用OGNL表達式,并基于值棧計算,返回一個Boolean類型值。 41 -->42 <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>43 <!--fieldexpression:字段表達式校驗器,當參數expression計算的值為true時,校驗通過,否則返回提示.44 參數expression:該參數為一個邏輯表達式,該參數使用OGNL表達式,并基于值棧計算,返回一個Boolean類型值.45 -->46 <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>47 <!--email:郵件地址校驗器,要求如果被校驗的屬性值非空,則必須是合法的郵件地址-->48 <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>49 <!--url:網址校驗器,要求如果被校驗的屬性值非空,則必須是合法的url地址-->50 <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>51 <!--visitor復合類型校驗器,該校驗器用來校驗Action中定義的復合類型屬性,支持簡單的復合類型或數組類型或集合類型.52 參數context:校驗器引用的上下文,可以隨意取,可選參數53 參數appendPrefix:是否為字段校驗信息加前綴(message中設置的值),可選參數54 -->55 <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>56 <!--conversion:類型轉換校驗器,該校驗器檢查是否存在轉換異常57 參數repopulateField:指定當類型轉換失敗后返回input頁面時,類型轉換失敗的表單是否保留原來的錯誤輸入,true為保留,false為不保留.58 -->59 <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>60 <!--stringlength:字符串長度校驗器,用于檢驗字段中字符串長度是否在指定的范圍61 參數trim:該參數為可選參數,用于指定是否在校驗之前對字符串進行整理。62 參數maxLength:用于指定最大字符串長度,該參數為可選63 參數minLength:用于指定最小字符串長度,該參數為可選64 -->65 <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>66 <!--regex:正則表達式校驗器,檢查被校驗的屬性值是否匹配一個正則表達式.67 參數expression:指定正則表達式68 參數caseSensitive:指定進行正則表達式匹配時,是否區分大小寫,默認值為true,為可選參數.69 -->70 <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>71 <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>72 </validators>
2)下面我們通過一個例子來演示XML配置文件方式數據校驗功能:
Action類:
1 public class ValidateAction extends ActionSupport { 2 private String name; 3 4 @Override 5 public String execute() throws Exception { 6 return SUCCESS; 7 } 8 9 public String getName() {10 return name;11 }12 13 public void setName(String name) {14 this.name = name;15 }16 }
struts2配置文件:
1 <struts> 2 <constant name="struts.devMode" value="true" /> 3 4 <package name="default" namespace="/" extends="struts-default"> 5 <action name="validateAction" class="com.sunny.action.ValidateAction"> 6 <result>/success.jsp</result> 7 <!--Struts2的校驗信息會返回到name值為input的視圖中--> 8 <result name="input">/input.jsp</result> 9 </action>10 </package>11 12 </struts>
在Action類相同目錄下新建XML格式驗證文件:ValidateAction-validation.xml:
1 <validators>2 <field name="name">3 <field-validator type="requiredstring">4 <param name="trim">true</param>5 <message>姓名不能為空</message>6 </field-validator>7 </field>8 </validators>
jsp頁面:
1 <body>2 <s:fielderror name="name"/>3 <form action="${pageContext.servletContext.contextPath}/validateAction.action">4 姓名:<input type="text" name="name"><br>5 <input type="submit" value="提交">6 </form>7 </body>
當第一次加載jsp頁面時不會顯示校驗信息:
當在表單中不添加任何信息直接點擊提交按鈕時會顯示設置的校驗信息:
如果要對指定方法進行驗證的話,XML驗證文件的命名方式:ActionClassName-ActionName-validation.xml,ActionName對應的是struts.xml文件對應的action標簽的name屬性的值。
3)visitor驗證規則示例
vsitor校驗器主要用于校驗Action里的復合類型、數組類型或者集合類型,如一個Action里面包含了Person類型的屬性,需要驗證Person類型的name屬性不能為空。
1)新建Person類:
1 public class Person { 2 private String name; 3 4 public String getName() { 5 return name; 6 } 7 8 public void setName(String name) { 9 this.name = name;10 }11 12 }
2)新建Action類:
1 public class ValidateAction extends ActionSupport { 2 private Person person; 3 4 @Override 5 public String execute() throws Exception { 6 return SUCCESS; 7 } 8 9 public Person getPerson() {10 return person;11 }12 13 public void setPerson(Person person) {14 this.person = person;15 }16 17 }
3)新建visitor驗證規則文件,該文件需要和Action類在同一目錄下,命名規則和上面講的一樣ActionClassName-validation.xml,這里為ValidateAction-validation.xml:
1 <validators> 2 <field name="person"> 3 <field-validator type="visitor"> 4 <param name="context">test</param> 5 <param name="appendPrefix">true</param> 6 <!--指定校驗失敗的提示信息前綴--> 7 <message>錯誤:</message> 8 </field-validator> 9 </field>10 </validators>
4)新建Person類的name屬性驗證規則文件,該文件需要和Person類在同一目錄下,命名規則為ClassName-context值-validation.xml,ClassName為要驗證的類,context值為<paramname="context">test</param>中的內容,-validation為固定內容,這里的文件名為Person-test-validation.xml:
1 <validators>2 <field name="name">3 <field-validator type="requiredstring">4 <param name="trim">true</param>5 <message>姓名不能為空</message>6 </field-validator>7 </field>8 </validators>
5)新建jsp頁面:
1 <body>2 <s:fielderror name="name"/>3 <form action="${pageContext.servletContext.contextPath}/validateAction.action">4 姓名:<input type="text" name="person.name"><br>5 <input type="submit" value="提交">6 </form>7 </body>
當第一次加載jsp頁面時不會顯示校驗信息:
當在表單中不添加任何信息直接點擊提交按鈕時會顯示設置的校驗信息:
新聞熱點
疑難解答