`

struts2 数据校验 ( Validateable,validation ) (1)

阅读更多

一。

1.继承 ActionSupport

    ActionSupport 已经实现了 Action 接口,还实现了 Validateable 接口,提供数据校验功能。

    在 Validateble 接口定义了一个 validate() 方法,重写该方法,如果校验表单输入域出现出错,则将错误添加到 ActionSupport 类的 fieldErrors 域中,然后通过 OGNL 表达式负责输出。

 

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;

//继承ActionSupport来实现Struts 2的Action类
public class LoginAction extends ActionSupport
{
	//下面是Action内用于封装用户请求参数的两个属性
	private String username;
	private String password;
	//username属性的getter和setter方法
	public String getUsername()
	{
		return username;
	}
	public void setUsername(String username)
	{
		this.username = username;
	}
	//password属性的getter和setter方法
	public String getPassword()
	{
		return password;
	}
	public void setPassword(String password)
	{
		this.password = password;
	}
	//处理用户请求的execute方法
	public String execute() throws Exception
	{
		//当用户请求参数的username等于crazyit,密码请求参数为leegang时,
		//返回success字符串,否则返回error字符串
		if (getUsername().equals("crazyit")
			&& getPassword().equals("leegang"))
		{
			//通过ActionContext对象访问Web应用的HTTP Session
			ActionContext.getContext().getSession()
				.put("user" , username);
			return SUCCESS;
		}
		else
		{
			return ERROR;
		}
	}
	//完成输入校验需要重写的validate方法
	public void validate()
	{
		//如果用户名为空,或者用户名为空字符串
		if (getUsername() == null || 
			getUsername().trim().equals(""))
		{
			//添加校验错误提示,使用getText方法来使提示信息国际化
                       //非国际化  addFieldError("username", "失败!"));
			addFieldError("username", getText("user.required"));
		}
		//当密码为空,或者密码为空字符串时,添加表单校验错误
		if (getPassword() == null ||
			getPassword().trim().equals(""))
		{
			addFieldError("password", getText("pass.required"));
		}
	}
}

    下面的 Action 类重写了 validate 方法,该方法会在 execute 方法之前执行,如果执行该方法之后,Action 类的 fieldErrors中已经包含了数据校验错误,请求将被转发 到 input 逻辑视图出,所以 在 struts.xml 中 要配置 input ,如下:

<?xml version="1.0" encoding="GBK"?>
<!-- 指定Struts 2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
	"http://struts.apache.org/dtds/struts-2.1.dtd">
<!-- struts是Struts 2配置文件的根元素 -->
<struts>
	<!-- Struts 2的Action必须放在指定的包空间下定义 -->
	<package name="strutsqs" extends="struts-default">
		<!-- 定义login的Action,该Action的实现类为lee.LoginAction类 -->
		<action name="login" class="lee.LoginAction">
			<!-- 定义处理结果和视图资源之间映射关系 -->
			<!-- 定义input的逻辑视图名,对应login.jsp页面 -->
			<result name="input">/login.jsp</result>
			<result name="error">/error.jsp</result>
			<result name="success">/welcome.jsp</result>
		</action>
		<!-- 定义获取图书的Action,对应实现类为lee.GetBooksAction -->
		<action name="getBooks" class="lee.GetBooksAction">
			<!-- 如果处理结果返回login,进入login.jsp页面 -->
			<result name="login">/login.jsp</result>
			<!-- 如果处理结果返回success,进入showBook.jsp页面 -->
				<result name="success">/showBook.jsp</result> 
		</action>

	</package>
</struts>

 支持国际化

   getText(key) 方法可以根据资源文件加载获得国际化提示信息

	public void validate()
	{
		//如果用户名为空,或者用户名为空字符串
		if (getUsername() == null || 
			getUsername().trim().equals(""))
		{
			//添加校验错误提示,使用getText方法来使提示信息国际化
                        //非国际化addFieldError("username", "失败!"));
			addFieldError("username", getText("user.required"));
		}
		//当密码为空,或者密码为空字符串时,添加表单校验错误
		if (getPassword() == null ||
			getPassword().trim().equals(""))
		{
			addFieldError("password", getText("pass.required"));
		}
	}
 

 

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<!-- 导入Struts 2标签库 -->
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title><s:property value="getText('loginPage')"/></title>
	<meta name="website" content="http://www.crazyit.org" />
</head>
<body>
<!-- 使用form标签生成表单元素 -->
<s:form action="login">
     <!-- 支持国际化 -->
	<!-- 生成一个用户名文本输入框 -->
	<s:textfield name="username" key="user"/>
	<!-- 生成一个密码文本输入框 -->
	<s:textfield name="password" key="pass"/>
    
    <!-- 不支持国际化 -->	
        <!-- 生成一个用户名文本输入框 -->
	<s:textfield name="username" label="用户名"/>
	<!-- 生成一个密码文本输入框 -->
	<s:textfield name="password" label="密  码"/>

        <!-- 生成一个提交按钮 -->
	<s:submit key="login"/>
</s:form>
</body>
</html>
 

2.使用 Struts2 的校验框架

     Action (不重写 validate 方法),却增加一个校验配置文件,配置文件通过 Struts2 已有的校验器,完成表单校验。Struts2 提供了大量的数据校验器,包括表单域校验器和飞表单域校验器2种。

     以下使用了 requiredstring 校验器,该校验器是一个必填校验器------指定某个表单域必须输入

<?xml version="1.0" encoding="GBK"?>
<!-- 指定校验规则文件的DTD信息 -->
<!DOCTYPE validators PUBLIC 
	"-//OpenSymphony Group//XWork Validator 1.0.3//EN" 
	"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<!-- 校验规则定义文件的根元素 -->
<validators>
	<!-- 校验第一个表单域:username -->
	<field name="username">
		<!-- 该表单域必须填写 -->
		<field-validator type="requiredstring">
			<!-- 如果校验失败,显示user.required对应的信息 -->
			<message key="user.required"/>
		</field-validator>
	</field>
	<!-- 校验第二个表单域:password -->
	<field name="password">
		<field-validator type="requiredstring">
			<!-- 如果校验失败,显示pass.required对应的信息 -->
			<message key="pass.required"/>
		</field-validator>
	</field>
</validators>

     ActionName-validation.xml:其中 ActionName 就是需要校验的 Action 的类名。

因此上面的校验规则文件应该命名为 "LoginAction-validation.xml",并且该文件应该与 Action 类的 class 文件位于同一个路径下。增加该检验规则文件后, LoginAction 不必重写 validate() 方法也可完成输入校验。

     在 struts.xml 文件的 Action 定义中,一样需要为 input 逻辑视图指定物理视图资源,将 input 逻辑视图映射到 login.jsp

 

 

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;

//继承ActionSupport来实现Struts 2的Action类
public class LoginAction extends ActionSupport
{
	//下面是Action内用于封装用户请求参数的两个属性
	private String username;
	private String password;
	//username属性的getter和setter方法
	public String getUsername()
	{
		return username;
	}
	public void setUsername(String username)
	{
		this.username = username;
	}
	//password属性的getter和setter方法
	public String getPassword()
	{
		return password;
	}
	public void setPassword(String password)
	{
		this.password = password;
	}
	//处理用户请求的execute方法
	public String execute() throws Exception
	{
		//当用户请求参数的username等于crazyit,密码请求参数为leegang时,
		//返回success字符串,否则返回error字符串
		if (getUsername().equals("crazyit")
			&& getPassword().equals("leegang"))
		{
			//通过ActionContext对象访问Web应用的HTTP Session
			ActionContext.getContext().getSession()
				.put("user" , username);
			return SUCCESS;
		}
		else
		{
			return ERROR;
		}
	}
}
 
<!-- 定义login的Action,该Action的实现类为lee.LoginAction类 -->
		<action name="login" class="lee.LoginAction">
			<!-- 定义处理结果和视图资源之间映射关系 -->
			<!-- 定义input的逻辑视图名,对应login.jsp页面 -->
			<result name="input">/login.jsp</result>
			<result name="error">/error.jsp</result>
			<result name="success">/welcome.jsp</result>
		</action>
 
<s:form action="login">
	<!-- 生成一个用户名文本输入框 -->
	<s:textfield name="username" key="user"/>
	<!-- 生成一个密码文本输入框 -->
	<s:textfield name="password" key="pass"/>
	<!-- 生成一个提交按钮 -->
	<s:submit key="login"/>
</s:form>

 

 

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Struts2 校验器

    在Struts2中,校验器(Validator)是处理用户输入验证的核心组件,确保提交到服务器的数据符合预设的业务规则。这篇博客文章可能是关于如何使用Struts2的内置校验机制以及自定义校验规则的探讨。 Struts2的校验框架...

    Struts2中的validation_多国语言版 国际化i18n+struts2数据校验.zip

    首先,我们来探讨"Struts2中的validation_多国语言版",这是Struts2的数据校验功能。Struts2提供了一种灵活的机制来验证用户输入,通过在Action类中定义校验规则或使用XML配置文件。当用户提交表单时,框架会自动...

    Struts2输入校验总结

    在Struts2框架中,输入校验是确保数据完整性和安全性的重要环节。对于手动输入完成校验,Struts2提供了灵活的机制。 1. **普通处理方式**:在Action类中重写`validate()`方法是最常见的做法。此方法允许开发者...

    Struts2数据校验与国际化

    在“Struts2数据校验与国际化”这一主题中,我们将深入探讨Struts2如何通过不同的验证机制确保数据的有效性,以及如何通过国际化功能提供多种语言的用户体验。 首先,数据校验是任何Web应用程序中的关键环节,它...

    Struts 2 数据校验功能及校验问题的解决方案

    为了处理更复杂的数据校验场景,Struts 2支持使用Validator插件,它可以读取XML配置文件或者使用JSR 303/JSR 349(Bean Validation)标准来进行校验。通过Validator插件,可以定义全局的校验规则,复用性强,同时也...

    struts2 数据校验

    在Struts2框架中,数据校验主要通过Action类的注解和Validation XML文件实现。Action类是处理用户请求的核心,通过在Action类的方法上添加注解,可以直接在控制器层进行数据校验。例如,可以使用`@Validated`注解...

    struts2 简单数据校验

    这篇博客“Struts2 简单数据校验”可能详细介绍了如何在Struts2框架中实现对用户输入的有效性验证。 数据校验是任何Web应用程序中的核心部分,它涉及到多个方面,如必填字段、数据类型检查、长度限制、格式验证等。...

    Struts2数据校验

    Struts2的数据校验主要通过Action类的属性注解和Validation.xml配置文件来实现。开发者可以使用注解的方式在Action类的属性上直接定义校验规则,例如`@NotEmpty`用于检查非空,`@Size(max=10)`用于限制字符串长度等...

    Struts2简单数据校验源码 20120417

    1. **Struts2数据校验框架概述** - Struts2的数据校验框架是基于OGNL(Object-Graph Navigation Language)表达式语言和拦截器机制实现的。 - 它允许开发者定义校验规则在Action类的属性注释或者独立的校验配置文件...

    struts2输入校验

    1. **Struts2的校验框架**: Struts2提供了内置的验证框架,基于XML配置或者注解实现。这个框架允许开发者定义一组规则来检查用户提交的数据,这些规则可以在Action类中应用。 2. **XML输入校验**: - **创建校验...

    struts2的数据校验

    Struts2集成Spring的Validation框架,允许开发者在Action类的属性上使用JSR303/JSR349(Bean Validation)注解进行数据校验。例如,`@NotNull`用于检查非空,`@Size(min=, max=)`限制字符串长度,`@Min`和`@Max`...

    Struts2简单数据校验源码

    首先,Struts2的数据校验主要依赖于两个核心组件:Validation拦截器和Validator框架。Validation拦截器在Action执行前对请求参数进行校验,如果发现有不符合规则的数据,会阻止Action的执行并返回错误信息。...

    Struts2自定义校验框架

    当数据校验失败时,Struts2会自动将错误信息放入ActionContext,可以通过`ActionContext.getErrorMessages()`获取这些错误信息。在JSP页面中,可以使用Struts2的标签库如`s:fielderror`来显示错误信息。 6. **...

    Struts2的输入校验

    1. 类型转换器:Struts2将接收到的字符串参数转换为相应的数据类型,并将这些值赋给Action的属性。如果在此过程中发生异常,异常信息会被保存并由`conversionError`拦截器处理。 2. 客户端校验:Struts2支持在...

    Struts2校验框架应用

    Struts2作为一款流行的Java Web开发框架,提供了一套强大的校验框架,使得开发者能够方便地对用户输入数据进行验证,确保数据的准确性和安全性。本文将深入探讨Struts2校验框架的应用,包括其核心概念、配置方式、...

    struts2 类型转换 数据校验

    在Struts2中,类型转换和数据校验是两个关键的特性,它们确保了用户输入的数据能够准确无误地被处理和验证,从而提高了应用的安全性和可靠性。 **类型转换(Type Conversion)** 在Struts2中,类型转换是自动进行...

    Struts2中Validation数据验证框架教程

    在Struts2中,Validation框架是用于处理数据验证的重要组件,它允许开发者在用户输入提交到服务器之前或之后进行验证,确保数据的准确性和完整性。下面将详细解释Struts2中的Validation框架及其在前后台验证中的应用...

    struts2输入校验总结

    总结,Struts2的输入校验机制提供了手动和自动两种方式,结合配置文件和内置校验器,能够实现灵活且强大的数据校验,有效地防止了非法数据的流入,提升了系统的安全性。在实际开发中,开发者可以根据业务需求选择...

Global site tag (gtag.js) - Google Analytics