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

在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



<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="login" class="com.action.LoginAction">
            <result name="hello">/hello.jspresult>
            <result name="input">/validateLogin.jspresult>
        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" %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
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"%>

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

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
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"%>

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

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
    <center>
        the your input
        <s:property value="age"/>that is wrong!<br/>
        <s:fielderror/>
    center>
body>
html>

你可能感兴趣的:(javaweb,struts2)