`
pengjj2
  • 浏览: 136647 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

struts2验证框架小结

阅读更多

 最近使用了一下struts2的验证框架,感觉不错。但其中也发现了一些技巧和问题,先总结如下。

1、建立一个实体类,主要是对因为登陆而设置的这个验证框架,所以首先创建一个用户实体类

 

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;

/*
 * 
 * 用户
 * 
 */

@Entity
@Table(name = "user_tbl")
public class UserEntity extends BaseEntity {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * 用户名
	 */
	private String name;
	
	/**
	 * 用户密码
	 */
	private String password;

	@Column(name = "name", length = 255, nullable = false)
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	@Column(name = "password", length = 255, nullable = false)
	public String getPassword() {
		return password;
	}

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

}

 

 2、创建登陆的Action类

import com.opensymphony.xwork2.ActionSupport;
import com.zaotao.entity.UserEntity;
import com.zaotao.service.manage.IAdminService;

/**
 * 管理员的普通action
 * @author 管理员
 *
 */
public class AdminAction extends ActionSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	/**
	 * 用户实体
	 */
	private UserEntity user;
	
	/**
	 * 验证码
	 */
	private String code;
		
	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}
	
	public UserEntity getUser() {
		return user;
	}

	public void setUser(UserEntity user) {
		this.user = user;
	}
	
	/**
	 * 登录
	 * @return 登录成功
	 */
	public String loginAdmin()
	{
	        return "success";
	}


	
}

 3、由于struts2的查找机制(这个可以参考相关资料),我们在这两个类所在的包中分别新建UserEntity-validation.xml和AdminAction-validation.xml

    (1)UserEntity-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE validators PUBLIC 
  		"-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
   	<field name="name">
		<field-validator type="requiredstring">
			<message>账号不能为空</message>
	    </field-validator>
	</field>
	
	<field name="password">
		<field-validator type="requiredstring">
			<message>密码不能为空</message>
		</field-validator>
	</field>
</validators>

 (2)AdminAction-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE validators PUBLIC 
  		"-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
	<field name="user">
		<field-validator type="visitor">
			<message>用户:</message>
		</field-validator>
	</field>

	<field name="code">
		<field-validator type="fieldexpression">
			<param name="expression">
				#session.CODE.equalsIgnoreCase(code)
			</param>
			<message>${#session.CODE}:${code}</message>
		</field-validator>
	</field>
</validators>

 

4、建立登陆的jsp页面

<s:form id="loginForm" action="login_AdminAction">
		<div class="admin_main_top"></div>
		<div id="admin_main">
			<div class="admin_main_head"></div>
			<div id="admin_main_content">
				<ul class="admin_main_ul">
					<li>
						<label>用户名:</label>
						<s:textfield name ="user.name" id="name"/>
						<span id="usererror" class="errorMeg"></span>
				    </li>
				
					<li>
						<label>密码:</label>
						<s:password id="pwd" name="user.password" onfocus="clearError('pwderror')" />
						<span id="pwderror" class="errorMeg"></span>
					</li>
			
					<li>
						<label>验证码:</label>
						<img src="<%=contextPath %>/authImg.servlet"  id="authImg" onclick="refresh()" />
						<s:textfield  name="code" id="code"  onFocus="clearError('codeerror');" />
						<span id="codeerror" class="errorMeg"></span> 
					</li>
					
					<li>
						<s:submit id="login_button" value="登录" />
					</li>
				</ul>
			</div>
					</div>
		<div><s:fielderror cssStyle="color: red"></s:fielderror></div>
	</s:form>

 Action的配置就不写了,说一下注意点。

(1)

<field-validator type="visitor">
<message>用户:</message>
</field-validator>

这段代码中message标签内不能为空,否则将会报错,visitor类型的作用在于,当验证字段user时,将获得user的类型,并根据类型UserEntity查找UserEntity-validation.xml,执行验证。

(2)

当你使用了图形验证码,你想在验证框架中将其进行验证时。需要先将图形验证码的字符串放入session中,然后在验证框架中验证。
<message>${#session.CODE}:${code}</message>
写这句的原因是我在执行图形验证的时候,老是验证不正确,所以我使用这句话,将存放在session中的code和我输入的code在错误信息内输出,已查看是否出现问题

(3)

如果你的表单使用的是simple方式,那么s:form是不会显示错误信息的,那么

我们在jsp页面写入 <s:fielderror cssStyle="color: red"></s:fielderror>,用来输出错误信息,当然你也可以针对每个字段输出错误信息。如果错误信息重复显示,说明你的action采用的单例模式,请将其修改为scope="prototype"

(4)

使用struts验证框架,需要配置input结果跳转。

(5)

若校验同时提供XML和validate()两种方法,则都会被执行,而且是XML校验先执行,validate()方法后执行。而错误信息都会显示。"short-circuit"属性仅针对xml有效

 

分享到:
评论
2 楼 pengjj2 2009-10-15  
wangguanqiu 写道
我个人感觉UserEntity-validation.xml的命名不是很好,应该是Action的类名+struts.xml中定义的action名称+validation.xml,比较好。这样,同一个Action类,在配置文件中的不同定义就可以对应不同的验证文件。

恩,因为目前东西,还比较少,有些东西还在测试和验证,等到出现此类需求时。会采用2楼的建议,非常感谢你的意见
1 楼 wangguanqiu 2009-10-15  
我个人感觉UserEntity-validation.xml的命名不是很好,应该是Action的类名+struts.xml中定义的action名称+validation.xml,比较好。这样,同一个Action类,在配置文件中的不同定义就可以对应不同的验证文件。

相关推荐

    Struts2 in action中文版

    10.1.2 Struts 2工作流中的验证框架 219 10.2 将动作关联到验证框架 222 10.2.1 使用ActionClass-validations.xml声明验证元数据 223 10.2.2 研究内建的验证器 226 10.3 编写自定义验证器 227 10.3.1 检查密码强度的...

    深入浅出Struts2(附源码)

    跟随作者一道深入Struts 2,聆听大量来之不易的经验之谈,你对Struts 2开发框架的理解和应用水平都将更上一层楼。本书适合Java Web 程序员阅读和参考 第1章 Model 2应用程序 1 1.1 Model 2概览 1 1.2 带servlet...

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

    一、准备工作及实例 3 ...小结Action 14 9.使用通配符 14 10.使用0配置:ZERO Annotation 15 11.Result配置详解 15 探讨type类型: 16 Type类型值 16 作用说明 16 对应类 16 chain 16 用来处理Action链 16 ...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    书中介绍了如何利用Struts 2 来解决Web 应用开发中的常见问题,同时还深入浅出地探讨了许多能帮助程序员编写Struts 2 应用程序的技巧,如管理页面导航活动、输入验证、国际化和本地化、对Ajax 的支持,等等。...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 ...15.13 小结

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 ...15.13 小结

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 ...15.13 小结

    JAVA WEB典型模块与项目实战大全

    5.2 客户端表单验证框架  5.3 服务器端验证  5.4 实现图形验证码  5.5 避免重复提交功能  5.6 缩略加水印图像  5.7 小结  第6章 网络硬盘  6.1 网络硬盘功能原理  6.2 网络硬盘功能具体实现——...

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

    6.4.2 spring 2.5集成mvc框架struts 2 411 6.4.3 ssh 2组合框架的基本开发步骤—eportal启程 414 6.5 小结 423 第2篇 实践篇 第7章 ssh 2热身——构建新闻发布系统 427 7.1 门户网站新闻资讯基本分类 427 7.2 ...

    从Java走向Java+EE+.rar

    10.1 Struts 2框架的特点 140 10.2 实例——Struts 2的“Hello World” 143 10.3 小结 151 第11章 利用JDBC访问数据库 152 11.1 JDBC基础 152 11.1.1 如何用JDBC访问数据库 152 11.2 实例——利用JDBC...

    structs程序设计从入门到精通word文档

    3.9本章小结 10 第4章 配置STRUTS组件 10 4.1 Web 应用部署描述符 10 4.2 STRUTS配置文件 10 4.3 应用资源文件 10 4.4 ANT的构建文件 10 4.5 struts中的日志 10 4.6 运用你的struts 10 第5章 理解ActionForm 10 5.1 ...

    JAVA程序开发大全---上半部分

    1.4 本章小结 5 第2章 MyEclipse集成开发环境的使用 6 2.1 MyEclipse集成开发工具界面 6 2.1.1 MyEclipse的菜单栏 7 2.1.2 MyEclipse的工具栏 13 2.1.3 MyEclipse的透视图 14 2.1.4 MyEclipse的视图 17 2.1.5 ...

    java web技术开发大全(最全最新)

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》重点讲解了Struts 2、Speing和HIbernate框架的基础知识和高级技术,如Sruts 2中的*、类型转换、国际化和标签等,HIbe rna{e的会话、0/R映射和...

    Spring in Action(第二版 中文高清版).part2

    第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP ...B.4 小结

    Web安全深度剖析(张柄帅)

    《Web安全深度剖析》总结了当前流行的高危漏洞的形成原因、攻击手段及解决方案,并通过大量的示例代码复现漏洞原型,制作模拟环境,更好地帮助读者深入了解Web应用程序中存在的漏洞,防患于未然。...16.4 小结 345

    java web开发技术大全

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》重点讲解了Struts 2、Speing和HIbernate框架的基础知识和高级技术,如Sruts 2中的*、类型转换、国际化和标签等,HIbe rna{e的会话、0/R映射和...

    Spring in Action(第2版)中文版

    目录 第一部分spring的核心 第1章开始spring之旅 1.1spring是什么 1.2开始spring之旅 1.3理解依赖注入 ...1.5小结 ...第2章基本bean装配 ...2.6小结 ...3.7小结 ...4.6小结 ...5.8小结 ...6.5小结 ...7.2验证用户身份 ...b.4小结

    Spring in Action(第二版 中文高清版).part1

    第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP ...B.4 小结

Global site tag (gtag.js) - Google Analytics