Strusts2数据校验的方法一(通过Action中的validate()方法实现)

来源:互联网 发布:jni java传递byte数组 编辑:程序博客网 时间:2024/05/22 04:32

在web应用,输入校验是一个不可忽略的问题。
一般来说,数据校验包含两个方面:客户端校验和服务器校验。客户端校验指的是通过JavaScript代码检验用户输入是否正确;服务器端校验指的是在服务器端的程序通过检查HTTP请求信息校验输入是否正确。而客户端的检验只能简单的过滤用户输入,大量的数据校验一般都是服务器端校验。服务器端校验实现方式有两种:通过Action中的validate方法实现和使用XWork校验框架实现。
通过Action中的validate()方法实现校验
Struts2中提供了一个com.opensymphony.xwork2.Validateable接口,这个接口中只有一个validate()方法,继承这个类之后Struts2就可以直接调用validate(),所以就要把校验用户输入信息的代码边写进去。
之前一直继承的ActionSupport就是com.opensymphony.xwork2.Validateable接口的实现类,但是它对validate()方法是空实现,所以要重写。(需要注意的是validate()方法实在execute()之前执行的,如果校验过了才会调用execute()否则就会将错误添加到ActionSupport类的fieldErrors域中)
而且为了实现不同的校验逻辑,Struts2框架提供了一个validateX()方法来准确校验Action中的某一个方法,其中X表示处理逻辑的方法名。
.下面通过一个实例说明validate()方法及validateX()方法的用法,该实例验证了输入的age的大小,如果在10~30之间符合要求,否则返回错误界面。

  LoginAction.java
package com.action;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport{    private static final long serialVersionUID=1L;    private String name;    private int age;    private String tel;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getTel() {        return tel;    }    public void setTel(String tel) {        this.tel = tel;    }    public String execute()throws Exception{        return "hello";    }    public String log ()throws Exception{        System.out.println("log");        return "hello";    }    public void validate(){        System.out.println("validate");    }    public void validateLog(){        System.out.println("validatelog");        if(age<10||age>30){            addFieldError("age","age must be from 10 to 30!");        }    }}
struts.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>    <package name="default" namespace="/" extends="struts-default">        <action name="login" class="com.action.LoginAction">            <result name="hello">/hello.jsp</result>            <result name="input">/validateLogin.jsp</result>        </action>        </package></struts>
index.jsp,hello.jsp,validateLogin.jsp主要代码如下
<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>    <center>        <s:form action="login">        <s:textfield name="name" label="Name"></s:textfield>        <s:textfield name="age" label="Age"></s:textfield>        <s:textfield name="tel" label="Tel"></s:textfield>        <s:submit method="log"></s:submit>        </s:form>    </center></body></html>
<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@ taglib prefix="s" uri="/struts-tags" %><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>    <center>        Name:<s:property value="name"/><br/>        Age:<s:property value="age"/><br/>        Tel:<s:property value="tel"/><br/>    </center></body></html>
<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@ taglib prefix="s" uri="/struts-tags" %><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>    <center>        the your input        <s:property value="age"/>that is wrong!<br/>        <s:fielderror/>    </center></body></html>
0 0