代码改变世界

Struts2 验证

2012-05-30 17:52  myjava2  阅读(229)  评论(0编辑  收藏  举报

Struts2验证机制

Action组件要求实现Validateable接口,覆盖其validate()方法,编写有关验证代码

还要实现ValidationAware接口,该接口提供了添加错误消息的方法

addFieldError()

一般继承ActionSupport类,其实现了上述接口。

Struts2验证工作原理

workflow拦截器首先检查Action组件是否实现接口Validateable,如果实现,则调用其validate()进行验证,在验证中如果发现非法数据则创建错误消息并通过ValidationAware接口中方法存放该错误消息。当validate()执行完毕,workflow拦截器还要接着调用ValidationAware的hasErrors()方法,看是否有任何验证失败消息。如果有,则终止Action的执行而返回input结果。

 

在struts2中,我们可以实现对action的所有方法进行校验或者对action的指定方法进行校验,校验失败将会自动跳转到input。

对于输入校验struts2提供了两种实现方法:

1.       采用手工编写代码实现(validate()和validateXxx())。

创建一个jsp登录页面

<form action="${pageContext.request.contextPath}/login.action" method="post">

    用户名:<input type="text" name="name"/><br>

    密码:<input type="text" name="pass"/><br>

    <input type="submit" value="确定"/>

    </form>

 

去struts.xml文件中声明

<action name="login"class="cn.csdn.action.LoginAction" method="login">

           <result name="input">/WEB-INF/error.jsp</result>

           <result>/index.jsp</result>

    </action>

LoginAction.java文件:

private String name;

    private String pass;

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    public String getPass() {

       return pass;

    }

    public void setPass(String pass) {

       this.pass = pass;

    }

    public LoginAction() {

       super();

       // TODO Auto-generatedconstructor stub

    }

   

    //进行校验

   写了validate方法之后,会对所有的方法都进行校验

    public void validate (){

       if("".equals(name) || name==null){

           //添加错误信息

           this.addFieldError("msg", "用户名称不能为空");

       }

       if("".equals(pass) || pass==null){

           //添加错误信息

           this.addFieldError("msg", "密码不能为空");

       }

}


 写了validateLogin方法之后,对固定方法进行校验,只会对login方法进行验证

public void validateLogin(){

       if("".equals(name) || name==null){

           //添加错误信息

           this.addFieldError("msg", "用户名称不能为空");

       }

       if("".equals(pass) || pass==null){

           //添加错误信息

           this.addFieldError("msg", "密码不能为空");

       }

}


public String login() throws Exception {

       // TODO Auto-generatedmethod stub

       System.out.println("进行业务登录操纵的处理.......");

       return SUCCESS;

}

public String query() throws Exception {

       // TODO Auto-generatedmethod stub

       System.out.println("进行业务查询操纵的处理.......");

       return SUCCESS;

error.jsp

  <!--struts2的标签库  首先必须引入struts2的标签库 -->

<%@taglib uri="/struts-tags"prefix="s" %>

在body中写入

     <s:fielderror></s:fielderror>即可

 

 

2. 基于XML配置方式实现。

在上述基础上,添加一个xml文件

LoginAction-validation.xml

<!DOCTYPE validators PUBLIC

        "-//ApacheStruts//XWork Validator 1.0.3//EN"

        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

<validators>

    <field name="name">

       <field-validator type="stringlength">

           <param name="trim">true</param>

           <param name="minLength">20</param>

           <param name="maxLength">30</param>

           <message>长度必须在20-30之间</message>

       </field-validator>

    </field>

    <field name="pass">

       <field-validator type="regex">

           <param name="trim">true</param>

           <param name="caseSensitive">true</param>

           <param name="expression"> <![CDATA[(\w{4,15})]]> </param>

           <message>必须是字符和数组的组合并且长度是4-15之间</message>

       </field-validator>

    </field>

</validators>