Struts2数据校验

Posted 超人不会飞丿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2数据校验相关的知识,希望对你有一定的参考价值。

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() {

        只会验证当前actionexecute方法!

③: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,从而定义验证规则:

    1XML文件名称语法: 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视图对应的错误页面!

以上是关于Struts2数据校验的主要内容,如果未能解决你的问题,请参考以下文章

struts2:字段校验和非字段校验代码示例

struts2 之 struts2数据校验

Struts2请求参数合法性校验机制

Struts2 校验数据问题

(转)struts2:数据校验,通过XWork校验框架实现(validation.xml)

深入分析JavaWeb 46 -- Struts2数据校验与国际化