`
coolxing
  • 浏览: 874270 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
9a45b66b-c585-3a35-8680-2e466b75e3f8
Java Concurre...
浏览量:97305
社区版块
存档分类
最新评论

struts2--表单校验

阅读更多

[coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.]

 

准备工作

1. 登陆页面的表单:

<s:fielderror />
<s:form id="loginForm" name="loginForm" method="post" namespace="/validate" action="validateAction_login.action" theme="simple">
 	用户名: <s:textfield name="username" /><br>
	密&nbsp;&nbsp;码: <s:textfield name="password" /><br>
	年&nbsp;&nbsp;龄: <s:textfield name="age" /><br>
	<s:submit value="login" /><br>
</s:form>

2. 定义校验规则:

用户名不能为null,  或者空字符串;

密码不能为null或者空字符串,  密码中只能包含[0-9a-zA-Z],  不能存在非法字符,  且长度在6-8位之间;

年龄必须为整型,  且不能为负数.


采用基本验证的方式校验表单

1. 创建ValidateAction类,  继承ActionSupport并实现Validateable接口.

public class ValidateAction extends ActionSupport implements Validateable {
	private String username;
	private String password;
	private Integer age;

	public String login() {
		return "success";
	}

	@Override
	public void validate() {
		if (username == null || "".equals(username.trim())) {
			this.addFieldError("username",  "用户名不能为空");
		}
		if (password == null || "".equals(password.trim())) {
			this.addFieldError("password",  "密码不能为空");
		} else if (!password.matches("[0-9a-zA-Z]{6, 8}")) {
			this.addFieldError("password",  "密码的长度应该在6-8位之间");
		}
		if (age < 0 ) {
			this.addFieldError("age",  "年龄不能为负数");
		}
	}
	// 省略getter和setter方法
}

validate()方法在业务方法之前执行. 通过查看底层源代码可以获知,  this.addFieldError(String fieldName,  String errorMessage)方法最终将在ValidationAwareSupport类的fieldErrors成员中添加一条记录(fieldErrors是一个Map<String,  List<String>>集合). validate()方法执行完成之后,  如果fieldErrors集合中不包含错误信息,  表示校验通过,  接下来将执行login方法. 否则表示校验没有通过,  不再执行login()方法.

默认情况下,  validate()方法将对所有的业务方法进行验证,  如果只想验证login()方法,  将validate()改名为validateLogin()即可.

2. 配置ValidateAction:

<action name="validateAction_*" class="cn.xing.validate.ValidateAction" method="{1}">
	<result name="success">/validate/success.jsp</result>
	<result name="input">/validate/login.jsp</result>
</action>

 

表单校验的执行流程

1. 类型转换器对请求参数执行类型转换, 并把转换后的值赋给action中的属性. 

2. 如果在执行类型转换的过程中出现异常, 系统会将异常信息保存到ActionContext, conversionError拦截器将异常信息封装到fieldErrors里, 然后执行第3步. 如果类型转换没有出现异常, 则直接进入第3步. 

3. 系统通过反射技术调用action中的validateXxx()方法, Xxx为方法名. 

4. 调用action中的validate()方法. 

5. 经过上面4步, 如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0), 系统自动将请求转发至名称为input的视图. 如果系统中的fieldErrors没有任何错误信息, 系统将执行action中的业务方法. 

 

基于XML配置方式实现输入校验

1. 创建Action类, 继承ActionSupport或实现Validateable接口:

public class ValidateXmlAction extends ActionSupport implements Validateable {
	private String username;
	private String password;
	private Integer age;

	public String login() {
		System.out.println("login");
		return "success";
	}

	// 省略getter和setter方法
}

2. 配置ValidateXmlAction:

<action name="validateXmlAction_*" class="cn.xing.validate.ValidateXmlAction" method="{1}">
			<result name="success">/validate/success.jsp</result>
			<result name="input">/validate/loginxml.jsp</result>
</action>

3. 在ValidateXmlAction的同级目录中创建用于校验表单的xml文件, 文件名为ValidateXmlAction-validation.xml(用于校验表单的xml文件的文件名规定为ActionClassName-validation.xml):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
  		"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
	<!--
		field:表示验证的字段名称, 对应的值是访问的action中的属性. 这里是ValidateXmlAction中的username属性
	-->
	<field name="username">
		<!--
			field-validator表示字段校验器, type属性指定使用的校验规则
		-->
		<field-validator type="requiredstring">
			<!-- 调用RequiredStringValidator中setTrim(true) -->
			<param name="trim">true</param>
			<!-- 给出错误提示信息 -->
			<message><![CDATA[用户名不能为空!!!]]></message>
		</field-validator>
	</field>

	<field name="password">
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<message><![CDATA[密码不能为空!!!]]></message>
		</field-validator>
		<field-validator type="regex">
			<param name="expression"><![CDATA[^[a-zA-Z0-9]+$]]></param>
			<message><![CDATA[密码中不能包含非法字符]]></message>
		</field-validator>
		<field-validator type="regex">
			<param name="expression"><![CDATA[^[a-zA-Z0-9]{6,8}$]]></param>
			<message><![CDATA[密码的长度应该在6-8位之间]]></message>
		</field-validator>
	</field>

	<field name="age">
		<field-validator type="ageValidate">
			<message><![CDATA[年龄不能为负数!!!]]></message>
		</field-validator>
	</field>
</validators> 

4. 上述xml文件中使用名称为ageValidate的校验规则对age字段进行校验. ageValidate是一个自定义的校验规则.

自定义校验规则首先需要创建一个类, 继承FieldValidatorSupport类:

public class AgeValidate extends FieldValidatorSupport {
	/**
	 * @param object: 是Action对象, 其中封装了待验证的字段. 此例中object为ValidateXmlAction对象
	 */
	public void validate(Object object) throws ValidationException {
		// 获取需要验证的字段的名称
		String fielsName = this.getFieldName();
		// 获取该字段的值
		Object value = this.getFieldValue(fielsName, object);
		// 判断表单提交的该字段的值是否为整型
		if (value instanceof Integer) {
			Integer ivalue = (Integer) value;
			if (ivalue < 0) {
				// 增加错误信息到fieldError集合中
				this.addFieldError(fielsName, object);
			}
		}
	}
}

接下来需要注册上述自定义的校验规则. 在src下创建 validators.xml文件(文件名称固定):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
	"-//OpenSymphony Group//XWork Validator Config 1.0//EN"
	"http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
	<validators>
	<!-- 注册自定义的验证器 -->
	<validator name="ageValidate" class="cn.xing.validate.AgeValidate"></validator>
</validators> 

5. 默认情况下将对Action中的所有业务方法进行校验. 如果只想对Action中的某个业务方法进行校验, 可以将用于校验的xml文件命名为ActionClassName-ActionName_methodName-validation.xml. 本例中只对login()方法进行校验, 只需将ValidateXmlAction-validation.xml文件更名为ValidateXmlAction-validateXmlAction_login-validation.xml即可. 

 

 

1
2
分享到:
评论

相关推荐

    struts2-login校验.rar

    在这个名为"struts2-login校验.rar"的压缩包中,我们很显然会看到一个关于Struts2登录验证的实现,涉及到admin和user两个不同角色的登录页面。 首先,我们需要了解Struts2的核心概念,如Action和Result。Action是...

    struts2-core-2.1.6.jar

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它简化了开发过程,提供了强大的表单验证、国际化、动态方法调用等功能。 1. **MVC设计模式**:MVC模式是软件工程中常用的设计模式...

    struts-2.5.2-all.zip

    3. **拦截器(Interceptors)**:这是Struts 2的一大特色,它可以插入到Action调用的前后,实现如日志记录、权限验证、数据校验等通用功能。例如,`TilesPlugin`用于页面布局,`ValidationInterceptor`进行表单验证...

    struts2-docs

    通过阅读这些文档,开发者能够掌握如何创建Action、配置Struts2、使用拦截器、处理表单提交、进行数据校验、实现动态方法调用等技术。此外,文档还会详细介绍如何利用Struts2的特性来优化性能,提高应用的安全性和可...

    starting-struts2-chinese

    - **表单验证**:利用Struts 2的内置验证机制,对用户输入进行校验。 - **国际化与本地化**:如何让应用支持多语言,实现动态切换。 - **标签库的使用**:掌握Struts 2提供的各种标签,提高视图层的开发效率。 - **...

    struts2-2.2.3 apps.rar

    4. **强大的表单和验证**:Struts2提供了一套强大的表单处理机制,包括类型转换、数据校验和字段级错误处理。XML或者注解可以用来定义验证规则。 5. **模板技术**:Struts2支持多种视图模板技术,如FreeMarker、...

    Struts2 校验器

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

    jcaptcha4struts2-demo-2.0.1.zip_DEMO_JCaptcha4Struts2.jar_jcaptc

    《Struts2环境下的Jcaptcha4Struts2验证码组件详解》 在Web开发中,验证码是一种常见的安全机制,用于防止自动化的恶意攻击,如机器人填写表单或进行非法操作。Struts2作为Java Web开发中广泛应用的MVC框架,与...

    struts-2.3.15

    10. **数据校验**:Struts 2提供了强大的表单数据验证功能,可以通过XML或注解定义验证规则,可以进行客户端和服务器端的数据校验,确保输入数据的正确性。 综上所述,Struts 2.3.15作为一个成熟的Web开发框架,...

    struts2-2.3.15.3-jar及mode

    这个库支持处理HTTP请求中的多部分/表单数据,允许Struts2应用接收并处理上传的文件。 8. **struts2-struts-2.3.15.3-搭建MODE.zip** 这个文件看起来是一个示例或模式项目,包含了一个基本的Struts2应用实例,...

    struts2笔记之校验表单信息

    总结来说,Struts2的表单校验机制提供了多种灵活的方式,开发者可以根据实际需求选择适合的校验策略,确保用户输入的数据准确无误,从而提高应用的安全性和稳定性。无论是使用XML配置文件、注解还是自定义校验方法,...

    struts2--1.入门程序

    此外,Struts2还提供了强大的验证功能,可以通过注解或XML配置对表单数据进行校验。 **5. 拦截器的应用** 拦截器是Struts2的一大特色,可以实现如日志、事务管理、权限控制等功能。例如,`ValidationInterceptor`...

    struts2官方例子7-表单验证 xml形式的验证

    在Struts2中,表单验证是非常重要的一个环节,它确保了用户输入的数据符合预设的规则,从而保证了应用程序的数据质量和安全性。本示例主要讲解的是使用XML文件进行表单验证的方法。 首先,让我们理解表单验证的基本...

    struts-1.2.9-src.zip

    3. 表单验证:学习如何在ActionForm中定义验证规则,以及在客户端和服务端进行数据校验。 4. 国际化和本地化:研究Struts如何支持多语言环境,如何配置资源文件以实现动态显示语言内容。 5. 模板和页面布局:通过...

    struts2------crm

    5. **数据校验**:内置的Validator框架可进行表单数据的验证,确保输入的有效性,这对于CRM系统中的数据完整性至关重要。 6. **插件支持**:Struts2有丰富的插件生态系统,例如Struts2 DOJO Plugin用于集成DOJO ...

    J2EE考试复习试题-struts2-spring-hibernate(答案整合完毕).doc

    - **表单标签**:在Struts 2表单标签库中,表单标签为`&lt;s:form&gt;`。 3. **ActionSupport类**: - `ActionSupport`类实现了`Validateable`接口和`Action`接口等,提供了基本的验证和业务逻辑处理功能。 - **验证...

    struts2 -2.3.15.3-验证框架简单实现mode

    当用户提交表单时,Struts2会自动进行验证,如果失败则返回相应的错误消息。 对于更复杂的验证逻辑,可以创建一个单独的验证类,通过`validate()`方法实现。例如: ```java public class RegistrationValidation ...

    struts2-处理类型转换

    在处理用户输入和业务逻辑交互时,Struts2提供了强大的类型转换和校验机制,以确保数据的有效性和安全性。以下是对给定内容的详细解释: **类型转换** 在Struts2中,当用户通过表单提交数据时,所有参数默认都以...

    struts2--3.Ognl与值栈

    当用户提交表单数据时,Struts2会使用OGNL将这些数据绑定到值栈中的Action对象。然后,Action执行业务逻辑,处理完成后,结果再次通过OGNL解析并推入值栈,供视图层展示。这种设计使得开发者可以专注于业务逻辑,而...

    struts-2.3.34-all框架

    - **强大的表单处理**:支持动态字段绑定,自动校验,简化了表单提交和验证的处理。 - **可扩展性**:通过插件系统,可以轻松集成其他技术,如数据库操作、模板引擎等。 在实际开发中,Struts 2可以与其他技术结合...

Global site tag (gtag.js) - Google Analytics