Struts2中validate數(shù)據(jù)校驗(yàn)的兩種方法詳解附Struts2常用校驗(yàn)器
1.Action中的validate()方法
Struts2提供了一個(gè)Validateable接口,這個(gè)接口中只存在validate()方法,實(shí)現(xiàn)這個(gè)接口的類可直接被Struts2調(diào)用,ActionSupport類就實(shí)現(xiàn)了Vadidateable接口,但他的validate()方法是一個(gè)空方法,需要我們來重寫。
validate()方法會(huì)在execute()方法執(zhí)行前執(zhí)行,僅當(dāng)數(shù)據(jù)校驗(yàn)正確,才執(zhí)行execute()方法, 如錯(cuò)誤則將錯(cuò)誤添加到fieldErrors域中,如果定義的Action中存在多個(gè)邏輯處理方法,且不同的處理邏輯需要不同的校驗(yàn)規(guī)則,這種情況下validate()會(huì)對(duì)所有處理邏輯使用相同的校驗(yàn)規(guī)則,為了實(shí)現(xiàn)不同的校驗(yàn)邏輯,需要通過validateX()方法,其中X表示處理邏輯的方法名。
Action類:
public class LoginAction extends ActionSupport{ private static final long serialVersionUID = 1L; private String userName; private String userPassword; public String execute(){ System.out.println("execute"); return SUCCESS; } public String login(){ System.out.println("login"); return SUCCESS; } public void validate(){ System.out.println("validata"); } public void validateLogin(){ System.out.println("validatelogin"); if(!(userName.equals("sbw") && userPassword.equals("123"))){ addFieldError("error","wrong info"); } } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } }
struts.xml
<package name="main" extends="struts-default"> <global-results> <result name="login">/login.jsp</result> </global-results> <action name="loginPerson" class="com.sbw.test.action.LoginAction" method="login"> <result name="success">/success.jsp</result> <result name="input">/validateLogin.jsp</result> </action> </package>
success.jsp
<body> 登錄成功 <s:property value="account"/> </body>
validateLogin.jsp
<body> <s:fielderror/> </body>
運(yùn)行結(jié)果(第一次測(cè)試正確,第二次測(cè)試錯(cuò)誤)
2.通過XWork校驗(yàn)框架
使用validate方法校驗(yàn)時(shí),如果Web應(yīng)用中存在大量Action就需要多次重寫validate方法,因此可以使用XWork的validator框架來對(duì)Struts2進(jìn)行數(shù)據(jù)校驗(yàn),減少代碼量。
在com.action包下創(chuàng)建驗(yàn)證文件LoginAction-validation.xml,注:當(dāng)一個(gè)Action中有多個(gè)業(yè)務(wù)處理方法是,命名規(guī)則為:actionName-methodName-validation.xml,其中actionName為Action類名,methodName為Action中某個(gè)業(yè)務(wù)處理方法的方法名,并且文件的搜索順序與方式一種validate()和validateX()一樣。
Login-validation.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <validators> <field name="userName"> <field-validator type="requiredstring"> <message>the name should not null</message> </field-validator> </field> <field name="userPassword"> <field-validator type="requiredstring"> <message>the password should not null</message> </field-validator> </field> </validators>
再次運(yùn)行結(jié)果為:
上述字段校驗(yàn)方式為字段校驗(yàn)方式,還有一種方式是非字段校驗(yàn)方式,如下:
Login-validation.xml:
<validators> <validator type="requiredstring"> <param name="fieldName">userName</param> <message>name should not null</message> </validator> <validator type="requiredstring"> <param name="fieldName">userPassword</param> <message>password should not null</message> </validator> </validators>
結(jié)果與字段校驗(yàn)方式一樣
附:Struts2常用校驗(yàn)器:
相關(guān)文章
Javaweb實(shí)戰(zhàn)之實(shí)現(xiàn)蛋糕訂購系統(tǒng)
隨著網(wǎng)絡(luò)的普及與發(fā)展,網(wǎng)上購物逐漸成為一種主流消費(fèi)的方式。這篇文章主要介紹了通過JavaWeb制作一個(gè)線上蛋糕訂購系統(tǒng),文中示例代碼講解詳細(xì),需要的朋友可以參考一下2021-12-12詳解Spring Cloud Gateway基于服務(wù)發(fā)現(xiàn)的默認(rèn)路由規(guī)則
這篇文章主要介紹了詳解Spring Cloud Gateway基于服務(wù)發(fā)現(xiàn)的默認(rèn)路由規(guī)則,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05java 字符串的拼接的實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了java 字符串的拼接的實(shí)現(xiàn)實(shí)例的相關(guān)資料,希望通過本文大家能掌握字符拼接的實(shí)現(xiàn),需要的朋友可以參考下2017-09-09關(guān)于Spring中的@Configuration中的proxyBeanMethods屬性
這篇文章主要介紹了關(guān)于Spring中的@Configuration中的proxyBeanMethods屬性,需要的朋友可以參考下2023-07-07Java實(shí)現(xiàn)UDP通信過程實(shí)例分析【服務(wù)器端與客戶端】
這篇文章主要介紹了Java實(shí)現(xiàn)UDP通信過程,結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)UDP服務(wù)器端與客戶端相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2020-05-05Jpa 實(shí)現(xiàn)自動(dòng)更新表中的創(chuàng)建日期和修改時(shí)間
這篇文章主要介紹了Jpa 實(shí)現(xiàn)自動(dòng)更新表中的創(chuàng)建日期和修改時(shí)間,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01Springboot如何使用Aspectj實(shí)現(xiàn)AOP面向切面編程
這篇文章主要介紹了Springboot如何使用Aspectj實(shí)現(xiàn)AOP面向切面編程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01Java編程Iterator迭代器設(shè)計(jì)原理及實(shí)現(xiàn)代碼示例
這篇文章主要介紹了Java編程Iterator迭代器設(shè)計(jì)原理及實(shí)現(xiàn)代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10