struts2:数据校验,通过Action中的validate()方法实现校验(续:多业务方法时的不同验证处理)

前文:struts2:数据校验,通过Action中的validate()方法实现校验,图解

如果定义的Action中存在多个逻辑处理方法,且不同的处理逻辑可能需要不同的校验规则,在这种情况下,就需要通过Struts2框架提供的validateX()方法来准确校验Action中的某一个方法,其中X表示处理逻辑的方法名。

还是以前的例子,换一种写法,来说明validate()方法和validateX()方法的用法。

1. 创建前台JSP页面

表单录入页面:registerM.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page isELIgnored="false"%>
<%@ taglib uri="/struts-tags" prefix="s"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
    </head>
    <body>
        <s:form action="registerM" method="post">
            账号:<s:textfield name="username"></s:textfield>${errors.username[0]}
            <br/>
            密码:<s:textfield name="password"></s:textfield>${errors.password[0]}
            <br/>
            年龄:<s:textfield name="age"></s:textfield>${errors.age[0]}
            <br/>
            身高:<s:textfield name="height"></s:textfield>${errors.height[0]}
            <br/>
            <s:submit method="log" value="提交"></s:submit>
        </s:form>
    </body>
</html>

注意:submit元素中的method属性为log,表示调用Action中的log方法,而不是默认的execute方法。

提交成功后显示页面:success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page isELIgnored="false"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <body>
        success! :)
    </body>
</html>

2. 创建Action类

package com.clzhang.struts2.demo1;

import com.opensymphony.xwork2.ActionSupport;

public class RegisterMAction extends ActionSupport {
    public static final long serialVersionUID = 1;

    private String username;
    private String password;
    private Integer age;
    private Double height;

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Double getHeight() {
        return height;
    }
    public void setHeight(Double height) {
        this.height = height;
    }
    
    public void validateLog() {
        System.out.println("validateLog方法被调用...");
        
        if (!username.trim().equals("admin")) {
            this.addFieldError("username", "用户非法,必须为admin");
        }

        if (!password.trim().equals("pass1")) {
            this.addFieldError("password", "密码非法,必须为pass1");
        }

        if (age == null || age >= 110 || age < 0) {
            this.addFieldError("age", "年龄非法,必须为0到100之间");
        }
        if (height == null || height < 0 || height > 3) {
            this.addFieldError("height", "身高非法,必须为0到3米之间");
        }
    }
    
    public String log() {
        System.out.println("log method said:"+ username + "|" + age + "|" + height + " register finished!");
        
        return SUCCESS;
    }
    
    @Override
    public void validate() {
        System.out.println("validate方法被调用...");
    }

    public String execute() {
        System.out.println(username + "|" + age + "|" + height + " register finished!");
        
        return SUCCESS;
    }
}

注意:execute()方法对应验证方法为validate()方法;而log()方法对应的验证方法则为validateLog()方法。

3. 修改struts.xml文件

        <action name="registerM" class="com.clzhang.struts2.demo1.RegisterMAction">
            <result name="success">/struts2/demo1/success.jsp</result>
            <result name="input">/struts2/demo1/registerM.jsp</result>
        </action>

很简单,提交成功显示成功信息;数据不正确则返回到registerM.jsp。

4. 测试

打开IE,输入地址:http://127.0.0.1:8080/st/struts2/demo1/registerM.jsp

结果如下:

直接提交,结果如下:

后台显示:

输入正确的数据,再次提交,前台显示到成功页面,后台显示:

注意:每次运行都是先调用validateLog方法,然后再调用validate方法(哪怕是validateLog方法已经出错了)。校验出错时,使用函数addFieldError将错误信息key-value对放入到容器中,在JSP中再取出来显示。

 

更多阅读:

struts2:数据校验,通过Action中的validate()方法实现校验,图解

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

posted @ 2013-12-24 18:31  那些年的事儿  阅读(1588)  评论(1编辑  收藏  举报