在提交表單數據時,若是數據須要保存到數據庫,空輸入等可能會引起一些異常,爲了不引發用戶的輸入引發底層異常,一般在進行業務邏輯操做以前,先執行基本的數據校驗。html
下面經過四種方式來闡述Struts 2的數據校驗功能。web
校驗前準備工做數據庫
1.建立實體類express
public class UserInfo { private String uname; private String upwd; private String repwd; public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getUpwd() { return upwd; } public void setUpwd(String upwd) { this.upwd = upwd; } public String getRepwd() { return repwd; } public void setRepwd(String repwd) { this.repwd = repwd; } }
2.建立Actionapache
public class LoginAction extends ActionSupport { private UserInfo info; @Override public String execute() throws Exception { return SUCCESS; } public UserInfo getInfo() { return info; } public void setInfo(UserInfo info) { this.info = info; } }
3.jsp頁面api
<h1>用戶註冊</h1> <s:fielderror></s:fielderror> <s:form action="aaaaa" method="POST"> <s:textarea label="用戶名" name="info.uname"/><br> <s:password label="密碼" name="info.upwd"/><br> <s:password label="確認密碼" name="info.repwd"/><br> <s:submit value="註冊"/>
一 用execute()實現校驗app
@Override public String execute() throws Exception { if (info.getUname().length()==0){ addFieldError("uname","用戶名不能爲空"); } if (info.getUpwd().length()==0){ addFieldError("upwd","密碼不能爲空"); } if(!info.getRepwd().equals(info.getUpwd())){ addFieldError("repwd","兩次輸入密碼不一致"); } if(this.hasFieldErrors()){ return INPUT; } return SUCCESS; }
struts.xml配置框架
<!--使用execute()方法實現數據校驗--> <action name="loginAction" class="cn.happy.action.LoginAction"> <result name="input">login.jsp</result> <result name="success">sucess.jsp</result> </action>
二.使用validate()實現數據校驗jsp
@Override public void validate() { if (info.getUname().length()==0){ addFieldError("uname","用戶名不能爲空"); } if (info.getUpwd().length()==0){ addFieldError("upwd","密碼不能爲空"); } if(!info.getRepwd().equals(info.getUpwd())){ addFieldError("repwd","兩次輸入密碼不一致"); } }
struts.xml配置ide
<!--使用validate()實現數據校驗--> <action name="loginAction" class="cn.happy.action.LoginAction"> <result name="input">login.jsp</result> <result name="success">sucess.jsp</result> </action>
三.使用validateXxx()方法實現數據校驗
public void validateRegist(){ if(info.getUname().length()<6||info.getUname().length()>15){ addFieldError("uname","用戶名長度在6-15位"); } if(info.getUpwd().length()<6){ addFieldError("upwd","密碼要大於6位"); } } public String Regist(){ return SUCCESS; } public void validate() { if (info.getUname().length()==0){ addFieldError("uname","用戶名不能爲空"); } if (info.getUpwd().length()==0){ addFieldError("upwd","密碼不能爲空"); } if(!info.getRepwd().equals(info.getUpwd())){ addFieldError("repwd","兩次輸入密碼不一致"); } }
struts.xml配置
配置action元素,指定Action由Regist()方法來進行請求的處理
<!--使用validateXxx()方法實現數據校驗--> <action name="loginAction" class="cn.happy.action.LoginAction" method="Regist"> <result name="input">login.jsp</result> <result name="success">sucess.jsp</result> </action>
四.使用框架驗證
Struts 2.0已經爲您實現不少經常使用的校驗了,如下在jar的default.xml中的註冊的校驗器。
< validators > < validator name ="required" class ="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator" /> < validator name ="requiredstring" class ="com.opensymphony.xwork2.validator.validators.RequiredStringValidator" /> < validator name ="int" class ="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator" /> < validator name ="double" class ="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator" /> < validator name ="date" class ="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator" /> < validator name ="expression" class ="com.opensymphony.xwork2.validator.validators.ExpressionValidator" /> < validator name ="fieldexpression" class ="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator" /> < validator name ="email" class ="com.opensymphony.xwork2.validator.validators.EmailValidator" /> < validator name ="url" class ="com.opensymphony.xwork2.validator.validators.URLValidator" /> < validator name ="visitor" class ="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator" /> < validator name ="conversion" class ="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator" /> < validator name ="stringlength" class ="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator" /> < validator name ="regex" class ="com.opensymphony.xwork2.validator.validators.RegexFieldValidator" /> </ validators >
使用校驗框架既能夠方便地實現表單數據校驗,又可以將校驗與Action分離,故咱們應該儘量使用校驗框架。
1編寫驗證文件,驗證文件要和驗證的Action放在同一個包下,而且採用ClassName-validation.xml方式命名,其中ClassName表示Action的類名
LoginAction-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> <!--用戶名不能爲空,長度在6-15位--> <field name="info.uname"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>用戶名不能爲空</message> </field-validator> <field-validator type="stringlength"> <param name="maxLength">15</param> <param name="minLength">6</param> <message>用戶名長度必須在${minLength}和${maxLength}之間</message> </field-validator> </field> <!--驗證密碼不爲空,長度不小於6--> <field name="info.upwd"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>密碼不能爲空</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">6</param> <message>密碼長度應大於等於${minLength}</message> </field-validator> </field> <!--驗證確認密碼--> <field name="info.repwd"> <field-validator type="fieldexpression"> <param name="expression">info.upwd==info.repwd</param> <message>兩次輸入密碼要相同</message> </field-validator> </field> </validators>
struts.xml配置
<!--使用框架驗證--> <action name="aaaaa" class="cn.happy.action.LoginAction" > <result name="input">login.jsp</result> <result name="success">sucess.jsp</result> </action>
上述的輸出說明了Struts 2.0的數據校驗工做方式,它須要通過下面幾個步驟:
不喜歡看文字的朋友,能夠參考下面的圖1。
看到這裏可能你們會疑問:「這麼多地方能夠校驗表單數據,到底我應該在那裏作呢?」有選擇是好事,但抉擇的過程每每是痛苦的,每每讓人不知所措。若是你們參照如下幾點建議,相信會比較容易地作出正確的抉擇。