在提交表单数据时,若是数据须要保存到数据库,空输入等可能会引起一些异常,为了不引发用户的输入引发底层异常,一般在进行业务逻辑操做以前,先执行基本的数据校验。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。
看到这里可能你们会疑问:“这么多地方能够校验表单数据,到底我应该在那里作呢?”有选择是好事,但抉择的过程每每是痛苦的,每每让人不知所措。若是你们参照如下几点建议,相信会比较容易地作出正确的抉择。