1.表单数据的验证:
前台验证:主要是通过JS验证, 表达数据是否合法!
后台验证:通过后台java代码进行验证!
Struts也提供了数据效验的方式!
Struts数据效验,通过拦截器完成:<interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>
①:代码方式验证Action中所有的方法:
步骤:
1. 搭建struts环境
2. login.jsp
<s:form action="validation_ex" method="post" theme="simple"> 账户:<s:textfield name="username"/><s:fielderror name="username"></s:fielderror> 密码:<s:password name="pwd"/> <s:submit value="提交"></s:submit> </s:form>
3.ValidationAction.java
public class ValidationAction extends ActionSupport { private static final long serialVersionUID = 1L; private String username; private String pwd; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String execute() throws Exception { return SUCCESS; } public void validate() { // 如果用户名为空,返回用户名不能为空 if (username == null||"".equals(username)) { super.addFieldError(username, "用户名不能为空"); } // 如果密码为空,返回密码不能为空 if (pwd == null||"".equals(pwd)) { super.addFieldError(pwd, "密码不能为空"); } } public String add(){ System.out.println("ValidationTest.add()"); return SUCCESS; } }
4.Struts.xml配置:
<struts> <include file="struts-default.xml"></include> <package name="validations" extends="struts-default"> <action name="validation_ex" class="com.gxxy.filetransport.validationtext.ValidationTest" method="execute"> <result>/JSP/validation/mainpage.jsp</result> <result name="input">/JSP/validation/register.jsp</result> </action> <action name="validation_add" class="com.gxxy.filetransport.validationtext.ValidationTest" method="add"> <result>/JSP/validation/register.jsp</result> </action> </package> </struts>
注意:这样写,validate会验证Action类中所有的方法.
②:代码方式验证Action类中指定的方法:
写验证方法命名规则:
validate + 要验证的方法名
如:
---->public void validateExecute() {
只会验证当前action的execute方法!
③:XML方式验证Action类中所有的方法:
总结代码方式验证:繁琐,设计很多重复的验证逻辑!例如:非空验证、数值验证、email、等。
Struts对于常用的验证,进行了封装,即提供了验证器, 验证指定的常用业务逻辑!
Struts提供的所有验证器:
路径:-->xwork-core-2.3.4.1.jar/com.opensymphony.xwork2.validator.validators/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="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/> <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/> <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"/> <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/> </validators>
如果写xml,从而定义验证规则:
1)XML文件名称语法: ActionClassName-validation.xml
注意:此xml需要与当期要验证的action在同一个目录:
举例:ValidationAction-validation.xml
2) 写XML
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <!-- 验证的每一个字段用field表示 --> <field name="username"> <!-- 指定使用的验证器 --> <field-validator type="requiredstring"> <!-- 验证失败的错误提示信息 --> <message>用户名不能为空</message> </field-validator> </field> <!-- 验证的每一个字段用field表示 --> <field name="pwd"> <!-- 指定使用的验证器 --> <field-validator type="requiredstring"> <!-- 验证失败的错误提示信息 --> <message>密码不能为空</message> </field-validator> </field> </validators>
④:XML验证Action中指定的方法:
与上面xml验证方式大致相同: 验证xml文件内容不变;
文件命名:
语法:ActionClassName-ActionName-validation.xml
举例:ValidationAction-validation_ex-validation.xml-validation.xml
验证ValidationAction中的execute方法
验证总结
代码:
①:重写validate() , 验证action所有方法
②:Validate方法名(), 验证指定“方法名”的方法
Xml:
①:验证所有方法: ActionClassName-validation.xml
②:验证指定方法: ActionClassName-actionName-validation.xml
代码验证:比较灵活,可以满足所有的需求.但是它比较繁琐,要写重复的验证判断逻辑!适用于表单字段较少的情况用!
XML验证:通用,但不够灵活; 可以验证特定简单的业务.适合于验证表单字段较多,可以大大简化代码!缺点就是(配置文件过多)
验证错误处理
Struts在进行数据效验的时候,验证失败,会返回input视图,要求我们要在struts.xml中配置input视图对应的错误页面!