`
johnson2132
  • 浏览: 26684 次
  • 性别: Icon_minigender_1
  • 来自: 潍坊
最近访客 更多访客>>
社区版块
存档分类
最新评论

struts2 基本校验

阅读更多

         Struts2对输入校验这方面采用的最基本方法是在每个Action里继承ActionSupport类,并且重写它的输入校验方法validate()。本示例中的RegisterAction代码中也显示,根据页面上输入的各种校验将所有不符合输入校验规则的错误信息都由ActionSupport类中另一个方法addFieldError方法将错误信息加入到表单错误信息,并且在输入数据的页面显示,而不会再由Action导航到注册成功页面struts.xml也定义了1个名字为“input”的result,它表明将所有输入失败的错误信息导航到一个特定页面。还是将这个特定页面定义为数据输入的页面!

    

package com.example.struts.action;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction extends ActionSupport {
	// Action类公用私有变量,用来做页面导航标志
	private static String FORWARD = null;

	// 用户名属性
	private String username;
	// 年龄属性
	private int age;
	private String password;
	private String repassword;
	private String mobile;
	private Date birthday;

	// 取得用户名值
	public String getUsername() {
		return username;
	}

	// 设置用户名值
	public void setUsername(String username) {
		this.username = username;
	}

	// 取得年龄值
	public int getAge() {
		return age;
	}

	// 设置年龄值
	public void setAge(int age) {
		this.age = age;
	}

	// 执行注册方法
	public String execute() throws Exception {
		FORWARD = "success";

		return FORWARD;
	}

	// 校验方法,用来输入校验
	public void validate() {
		// 校验是否输入用户名
		if (getUsername() == null || getUsername().trim().equals("")) {			
			addFieldError("username", "请输入用户名");
		}
		// 校验是否输入生日
		if(getBirthday()==null){
			addFieldError("birthday", "请输入生日日期");
		}else
		// 校验是否输入正确的生日日期
		if(getBirthday().after(new Date())){
			addFieldError("birthday", "请不要输入未来日期");
		}
		// 校验是否输入密码
		if (getPassword() == null || getPassword().trim().equals("")) {			
			addFieldError("password", "请输入密码");
		}
		// 校验是否输入确认密码
		if (getRepassword() == null || getRepassword().trim().equals("")) {			
			addFieldError("repassword", "请输入确认密码");
		}
		// 校验输入的密码和确认密码是否一致
		if (!getPassword().equals(getRepassword())) {			
			addFieldError("repassword", "确认密码和密码输入不一致");
		}
		// 校验输入的手机号码长度是否正确
		if (getMobile().length()!=11) {			
			addFieldError("mobile", "请输入正确的手机号码");
		}
		// 校验输入的年龄是否正确
		if (getAge()<1||getAge()>99) {			
			addFieldError("age", "请输入您的真实年龄");
		}		
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getRepassword() {
		return repassword;
	}

	public void setRepassword(String repassword) {
		this.repassword = repassword;
	}

	public String getMobile() {
		return mobile;
	}

	public void setMobile(String mobile) {
		this.mobile = mobile;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}



}

 

<struts>
	<!-- Action所在包定义 -->
	<package name="C08.1.1" extends="struts-default">
	<!-- Action名字,类以及导航页面定义 -->
		<!-- 通过Action类处理才导航的的Action定义 -->
		<action name="Register"
			class="action.RegisterAction">
			<result name="input">/jsp/register.jsp</result>
			<result name="success">/jsp/success.jsp</result>
		</action>
		<!-- 直接导航的的Action定义 -->
		<action name="index" >
			<result >/jsp/register.jsp</result>			
		</action>
	</package>
</struts>

 

输入校验的数据输入JSP文件:

		<!-- 用户信息注册form表单 -->
	<s:form action="Register">
		<table width="60%" height="76" border="0">
				<!-- 各标签定义 -->
				<s:textfield name="username" label="用户名"/>
				<s:password name="password" label="密  码" />
				<s:password name="repassword" label="密  码确认" />
				<s:textfield name="birthday" label="生日"/>
				<s:textfield name="mobile" label="手机号码"/>
				<s:textfield name="age" label="年龄"/>
				<s:submit value="注册" align="center"/>				
		</table>
	</s:form>

 validateXXX方法进行输入校验

// 执行注册方法
	public String Register() throws Exception {
		FORWARD = "success";

		return FORWARD;
	}

	// 校验方法,用来输入校验
	public void validateRegister() {
		// 校验是否输入用户名
		if (getUsername() == null || getUsername().trim().equals("")) {			
			addFieldError("username", "请输入用户名");
		}
		// 校验是否输入生日
		if(getBirthday()==null){
			addFieldError("birthday", "请输入生日日期");
		}else
		// 校验是否输入正确的生日日期
		if(getBirthday().after(new Date())){
			addFieldError("birthday", "请不要输入未来日期");
		}
		// 校验是否输入密码
		if (getPassword() == null || getPassword().trim().equals("")) {			
			addFieldError("password", "请输入密码");
		}
		// 校验是否输入确认密码
		if (getRepassword() == null || getRepassword().trim().equals("")) {			
			addFieldError("repassword", "请输入确认密码");
		}
		// 校验输入的密码和确认密码是否一致
		if (!getPassword().equals(getRepassword())) {			
			addFieldError("repassword", "确认密码和密码输入不一致");
		}
		// 校验输入的手机号码长度是否正确
		if (getMobile().length()!=11) {			
			addFieldError("mobile", "请输入正确的手机号码");
		}
		// 校验输入的年龄是否正确
		if (getAge()<1||getAge()>99) {			
			addFieldError("age", "请输入您的真实年龄");
		}		
	}

 

 

 

    <!-- fielderror标签显示所有校验错误信息 -->
    <s:fielderror></s:fielderror>
	<!-- 用户信息注册form表单 -->
	<s:form action="Register!Register.action">
		<table width="60%" height="76" border="0">
				<!-- 各标签定义 -->
				<s:textfield name="username" label="用户名"/>
				<s:password name="password" label="密  码" />
				<s:password name="repassword" label="密  码确认" />
				<s:textfield name="birthday" label="生日"/>
				<s:textfield name="mobile" label="手机号码"/>
				<s:textfield name="age" label="年龄"/>
				<s:submit value="注册" align="center"/>				
		</table>
	</s:form>

validate方法是对所有Action中方法的输入校验都进行校验,validateRegister方法只对Register方法进行校验。因此两者不能重复使用,都使用会造成两个方法都进行了校验的结果。执行顺序是先validateRegistervalidate。如果validateRegister方法有特殊的输入校验则就会被validate方法“覆盖

 首先第1个“Register”是RegisterAction中的方法名,一定要和方法名写成一样。而在“!”后的“Register”则是在struts.xml配置文件中定义的RegisterAction的映射里的“name”内容。黑体的内容表明该表单的Action是执行RegisterAction中的Register方法。如果在页面中直接写“!”后面的内容则表示执行的是RegisterAction中的execute方法

l         查找Action中是否有validateXXX方法。如果有则执行该方法。将校验产生的错误信息放置到ActionContext对象中。

l         查找Action中是否有validate方法。如果有则执行该方法。将校验产生的错误信息放置到ActionContext对象中。

l         查找视图界面是否有fielderror标签定义。如果有则返回到result为“input”的视图。同时ActionContext对象中有关的输入校验的错误信息也显示在该视图中。

 

 

分享到:
评论
12 楼 duronshi 2011-05-17  
弱弱问下,如果我不用struts的标签<s:form而用html自带的<form action='aa.action',这样还可以验证(执行validate方法)不?
11 楼 java_vm 2011-05-13  
hyx0914 写道
呵呵,这样写的话为什么不在前台页面就验证了呢?

前台页面验证始终是有弊端的。。。。
10 楼 hyx0914 2011-05-12  
呵呵,这样写的话为什么不在前台页面就验证了呢?
9 楼 chrislee1982 2011-05-10  
还用这种方式验证?难道不知道可以使用xml配置或者annotation配置验证吗??
8 楼 liuahrj 2011-04-22  
利用struts2进行验证,如何将其提示放在右边呢?
7 楼 xiaoye4188 2010-07-30  
像这些用户名密码不能为空、长度限制等等的校验 还是用struts2的校验框架方便 且容易管理 不然在action中写那么多代码 杂而乱
6 楼 magicbu 2010-07-28  
phoenixfm 写道
还是觉得尽可能用JS在客户端验证更好点。毕竟可以在JS里控制错误的提示样式或其它的。

JS是可以被关闭的,不安全~
5 楼 a881127b 2010-07-28  
学习了,原来不知到validate()对所有方法都校验,以为知识校验execute()
4 楼 phoenixfm 2010-07-27  
还是觉得尽可能用JS在客户端验证更好点。毕竟可以在JS里控制错误的提示样式或其它的。
3 楼 iq527 2010-07-27  
引用
首先第1个“Register”是RegisterAction中的方法名,一定要和方法名写成一样。而在“!”后的“Register”则是在struts.xml配置文件中定义的RegisterAction的映射里的“name”内容。


actionName!methodName.action

2 楼 zqding 2010-07-27  
写的很基础的东西,楼上说滴对。
1 楼 volking 2010-07-26  
最后三句话可以看

相关推荐

    struts2 基本校验(配置文件形式)

    NULL 博文链接:https://johnson2132.iteye.com/blog/721059

    struts2讲义_吴峻申

    8.2.3 Struts2输入校验出错信息的国际化配置形式 163 8.3 集合类型输入校验介绍 165 8.3.1 Struts2中单个Java对象的输入校验形式 166 8.3.2 Struts2对象集合即批量输入的校验形式 169 8.4 Struts2输入校验器大全 171...

    Struts2入门教程(全新完整版)

    十二、总结 本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及提供的app实例。 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图...

    BBS-struts2课程设计-南工考研论坛

    (3) 用户注册,需要通过Struts2字段校验判断用户注册页面中的用户名、密码、年龄、出生日期、邮箱等是否符合校验规则,并对自定义校验器要求密码必须包含数字、字母以及两个以上的特殊字符(!@#$%^&*)。 (4) 对用户...

    struts2总结

    主要总结struts2的一些基本知识点,包括struts2的国际化,拦截器的配置,strtus2 的零配置,struts2实现数据校验

    图书管理系统-struts2

    (2) 用户注册,需要通过Struts2字段校验判断用户注册页面中的用户名、密码、年龄、出生日期、邮箱等是否符合校验规则,并对自定义校验器要求密码必须包含数字、字母以及两个以上的特殊字符(!@#$%^&*)。 (3) 对用户...

    struts2的基本知识

    struts2的基本入门,里面包含了struts2开发中常用的基本技术

    struts2学习心得

    随笔记载了struts2中关于数据类型转换和校验方式的一些基本信息

    struts2学习ppt

    掌握Struts2原理、基本配置及...掌握Struts2核心解析、国际化、类型转换、输入校验、OGNL、Struts2标签库 了解AJAX技术支持 掌握文件的上传与下载。 深入理解MVC与Struts之间的关系,并使用基本MVC和Struts进行项目开发

    Struts2电子课件

    Struts2的讲义 1、入门及基本配置 2、类型转化 3、输入校验 4、校验框架 5、拦截器 6、文件上传与下载 7、国际化 8、深入了解struts 9、ognl

    Struts2+Spring3+Hibernate3 用户管理系统实例源码

    本例主要是实现了struts2+spring3+hibernate3的 基本框架搭建的注册登录,以及用户增删改查,适于初学者学习。 包括:注册 登录功能 分页的实现 前端校验 验证码的实现 注册时有ajax 校验,登录时 后台从数据库...

    bbs论坛系统 struts2 spring hibernate

    使用了struts2上传下载,语言国际化,拦截器,校验框架等。实现功能:用户模块 用户注册 用户登陆修改用户信息 用户等级.管理人员模块,用户删除 用户授权,取消权限。版面模块,添加版面,删除版面。类别模块,添加...

    Struts框架搭建和基本使用

    Struts框架搭建和基本使用,包括7个必备的jar,输入校验,freemark使用,国际化资源文件配置的基本使用

    structs2教程

    structs2教程,重点介绍了Struts2入门及基本配置 Struts2核心概念及原理 Struts2输入校验 Struts2实现文件上传及下载 Struts2深入探索 Struts2的拦截器 Ognl语言 Struts2标签

    Struts2.1学习笔记

    基于 Struts2.1.8 包括Struts2的基本应用、文件上传、拦截器、输入校验、国际化、OGNL表达式、Struts2标签等内容。

    Struts网络编程例学与实践 源码

    前7章是Struts的基础,其中有Struts基本概念、Struts的AcitionForm、Struts标签和Struts的Action等内容;第8-11章是Struts比较高级的内容,包括Struts自定义标签、Struts校验机制、Struts国际化方法和Struts的Tickes...

    低清版 大型门户网站是这样炼成的.pdf

    2.3.2 struts 2应用基本开发步骤—搭建eportal应用 69 2.3.3 struts 2中集成fckeditor 80 2.3.4 struts 2中集成displaytag 83 2.4 struts 2国际化实现 85 2.4.1 web应用的中文本地化 85 2.4.2 struts 2应用的...

Global site tag (gtag.js) - Google Analytics