Struts2(五)数据校验

一、概述

  在提交表单数据时,如果数据需要保存到数据库,空输入等可能会引发一些异常,为了避免引起用户的输入引起底层异常,通常在进行业务逻辑操作之前,先执行基本的数据校验。

  下面通过两种方式来阐述Struts 2的数据校验功能。

二、重写validate方法

  我们编写的Action一般继承与ActionSupport,而ActionSupport不仅实现了Action接口,还实现了Validatable接口,提供了数据校验功能。在Validatable接口中定义一个validate方法,重写该方法,如果校验表单输入域出现错误,则将错误添加到ActionSupport类的fieldError域中,然后通过OGNL表达式输出。

  下面是用户登录界面:

<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>???????</title>
</head>
<body>
    <s:form action="login">
        <s:textfield name="username" key="user"></s:textfield>
        <s:textfield name="password" key="pass"></s:textfield>
        <s:submit key="登录"></s:submit>
    </s:form>
</body>
</html>

  用户输入数据后,提交到loginAction中:

public class LoginActionexample extends ActionSupport
{
    private static final long serialVersionUID = -849990804545358129L;
    private String username;
    private String password;
    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;
    }
    @Override
    public String execute() throws Exception
    {
        if (getUsername().equals("xujian")&&getPassword().equals("123456"))
        {
            return SUCCESS;
        }
        else
            return ERROR;
    }
    @Override
    public void validate()
    {
        if(getUsername()==null||getUsername().trim().equals(""))
        {
            addFieldError("username","用户名不能为空");
        }
        if(getPassword()==null||getPassword().trim().equals(""))
        {
            addFieldError("password","密码不能为空");
        }
    }
}

  上面的LoginAction类重写了validate方法,该方法会在执行excute方法之前执行,如果执行该方法之后,Action类的filedError中包含了数据校验错误,请求将被转发到input逻辑视图。

  struts.xml配置如下:

    <action name="loginexample" class="com.LoginActionexample">
            <result name="input">/login.jsp</result>
            <result name="success">/welcome.jsp</result>
            <result name="error">/error.jsp</result>
       </action>

  如果输入为空,则会提示:

  

  这是因为<s:form>标签和Struts2表单控件标签具备了输出校验提示的能力。

三、使用Struts2的校验框架

  我们还可以不重写validate方法,而通过增加校验配置文件来进行数据校验。这个校验配置文件通过使用Struts2已有的校验器来完成对表单域的校验,下面以requiredstring校验器为例,这个校验器是一个必填校验器,指定某个表单域必须输入。

  下面是这个校验配置文件的写法:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.2//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
    <field name="username">
        <field-validator type="requiredstring">
            <message key="用户名不能为空"></message>
        </field-validator>
    </field>
    <field name="password">
        <field-validator type="requiredstring">
            <message key="密码不能为空"></message>
        </field-validator>
    </field>
</validators>

  注意:这个校验配置文件必须遵守下面两个规则:

  1、该文件命运格式必须是Action类名-validation.xml,例如本例中该文件名为:LoginActionexample-validation.xml。

  2、该文件必须与Action类的class文件位于同一路径下,本例中文件位于

  

  本例中的LoginAction类为:

public class LoginActionexample extends ActionSupport
{
    private static final long serialVersionUID = -849990804545358129L;
    private String username;
    private String password;
    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;
    }
    @Override
    public String execute() throws Exception
    {
        if (getUsername().equals("xujian")&&getPassword().equals("123456"))
        {
            return SUCCESS;
        }
        else
            return ERROR;
    }
}

  最后不要忘记,在struts.xml文件中依然要为input逻辑视图指定物理视图资源。

时间: 2024-10-24 05:15:00

Struts2(五)数据校验的相关文章

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

转载自:http://www.cnblogs.com/nayitian/p/3475661.html struts2:数据校验,通过XWork校验框架实现(validation.xml) 根据输入校验的处理场所的不同,可以将输入校验分为客户端校验和服务器端校验两种.服务器端验证目前有两种方式: 第一种: 参考:struts2:数据校验,通过Action中的validate()方法实现校验,图解 第二种: 使用validate()方法校验时,如果Web应用中存在大量Action就需要多次重写val

Struts2之数据校验

时间:2017-1-11 11:09 --Struts2提供的数据校验 在开发中,请求参数是需要校验的:    客户端:过滤正常用户的错误操作,通过JS代码完成    服务器:Java代码 Struts2提供的校验是服务器端校验. 校验方式分为两种:    1.手动校验(编码校验)    2.配置校验(自动校验,基于Annotation,基于XML) 1.手动校验:    要求:Action类必须继承ActionSupport,需要重写validate()方法(是Validateable接口中的

使用Struts2实现数据校验

为什么需要数据校验呢?答案很简单,假如当你登录想要京东,这时就需要数据校验了如果不输入用户名的话,那么就不会登陆成功,并且会提示出"请输入用户名"的字样 那么,在Struts2中实现数据校验的方法有哪些呢?接下来我们探讨一下. 实现数据校验有四种方法: 1.用execute()方法实现数据校验 编写一个Action,继承ActionSupport类,重写execute() 步骤1:在Web项目的cn.happy.action下创建一个ExecuteAction(UserInfo为用户实

Struts2学习第三天——保存登陆信息及数据校验

在JSP中服务器端保存数据的作用域通常有request.session.application,它们对应的Servlet API分别是HttpServletRquerst.HttpSession.ServletContext.同样在Struts2的控制器中也需要访问这些作用域. Struts2提供了一个ActionContext类,该类被称为Action上下文或者Action环境,Action可以通过该类访问最常用的ServletAPI. ServletAPI有多种访问方式: 1. Servle

Struts2学习笔记(九)——数据校验

Struts2的数据校验属于服务器端校验,Struts2 支持校验方式 : 手动校验(代码校验) :在服务器端通过编写java代码,完成数据校验 自动校验(配置校验) :XML配置校验(主流) 和 注解配置校验 1.手动校验 1)Struts2的手动校验步骤: 首先要从页面中获取对应的标签name属性的值,在动作类action中声明同名的属性,提供get和set方法; 要继承ActionSupport类或者实现Validateable接口: 重写Validateable接口的validate()

struts2 之 struts2数据校验

1. 数据校验一般分为2类:前端的校验(js校验),后端的校验(java代码):实际开发中大部分情况下都是采用js校验.在对数据安全要求较高的情况下可能会采用后端验证. 2.  Struts2提供了后端验证机制.有两种方式来实现,一种是通过硬编码来实现,一种是通过校验框架来实现.在struts2如果使用struts2提供校验机制,那么必须继承ActionSuport类.该类中有一个vaildete方法,在处理的action类中重写该方法,那么在执行所有方法的时候,会执行validate方法.va

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

1.用户输入数据的校验 1.校验方式 a:客户端校验.(防君子防不了小人)在页面中写js脚本. 这样做的好处是: 输入错误的话提醒比较及时: 减轻服务器的压力 b.服务器端校验. 数据安全 ,整个应用阻止非法数据的最后防线 而在实际开发中通常选择:a+b 2.服务器端数据校验: 1.编程式校验:自己Action中编写一个校验代码(缺点:验证规则都写在了代码中) 前提:动作类继承ActionSupport,重写Validateable接口中的validate()方法 ,在该方法中完成验证. 步骤如

Struts2学习第二天——获取参数与数据校验

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.06.14 lutianfei none struts2中获取请求参数 在struts2中action是什么?(struts2是一个mvc框架) View : jsp Model : action Control : action & StrutsPrepareAndExecuteFilter 1.属性驱动 1.直接将action做一个model(类似bean结构),就可以得到请求参数. 问题1:action封装请求参

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

1.用户输入数据的校验 1.校验方式 a:客户端校验.(防君子防不了小人)在页面中写js脚本. 这样做的好处是: 输入错误的话提醒比较及时: 减轻服务器的压力 b.服务器端校验. 数据安全 ,整个应用阻止非法数据的最后防线 而在实际开发中通常选择:a+b 2.服务器端数据校验: 1.编程式校验:自己Action中编写一个校验代码(缺点:验证规则都写在了代码中) 前提:动作类继承ActionSupport,重写Validateable接口中的validate()方法 ,在该方法中完成验证. 步骤如