`
caleb_520
  • 浏览: 250463 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

利用Struts 2完成手动校验

阅读更多
利用Struts 2完成手动校验有两种方式:

(1)重写validate方法
(2)重写validateXxx方法


首先,介绍一下重写validate方法,实现方式是通过在Action中重写ActionSupport类的validate方法就能完成客户端提交过来的数据校验。

下面创建一个RegistValidateAction.java文件,该文件主要是对userRegister_validate.jsp页面中的打“*”的字段进行处理。界面如下图:


RegistValidateAction.java代码如下:
package com.gxa.edu.struts2.action.ch6;

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

public class RegistValidateAction extends ActionSupport {
	
	private String username;
	private String userpassword;
	private String confirm_password;
	private String address;
	private String vaild;
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getConfirm_password() {
		return confirm_password;
	}
	public void setConfirm_password(String confirm_password) {
		this.confirm_password = confirm_password;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getUserpassword() {
		return userpassword;
	}
	public void setUserpassword(String userpassword) {
		this.userpassword = userpassword;
	}
	public String getVaild() {
		return vaild;
	}
	public void setVaild(String vaild) {
		this.vaild = vaild;
	}

	public void validate() {
		System.out.println("===注册用户数据校验方法===");
		if (username == null || "".equals(username)) {
			addFieldError("username" , "用户名不能为空,请填写");
		}
		if (userpassword == null || "".equals(userpassword)) {
			addFieldError("userpassword" , "密码不能为空,请填写");
		} else if (confirm_password == null || "".equals(confirm_password)) {
			addFieldError("confirm_password" , "确认密码不能为空,请填写");
		} else if (!userpassword.equals(confirm_password)) {
			addFieldError("userpassword" , "第一次密码和第二次确认密码不相同,请重新输入");
		}
		if (address == null || "".equals(address)) {
			addFieldError("address" , "地址不能为空,请填写");
		}
		ActionContext ctx = ActionContext.getContext();
		String rand = (String) ctx.getSession().get("rand");
		if (rand == null || !rand.equals(vaild)) {
			addFieldError("vaild" , "验证码输入不正确,请重新输入");
		}
	}
}

上面的validate()方法是覆盖ActionSupport类中方法,该方法主要作用就是当客服端提交过来的数据,首先必须执行validate()方法来进行数据校验,一旦根据数据校验失败,就把校验失败提示信息通过addFieldError方法添加到系统的fieldError。然后通过在JSP页面中加入<s:fielderror/>,就可以在页面中输出校验失败的提示信息。

接着,创建struts-ch6.xml,在该文件中添加如下信息:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<constant name="struts.custom.i18n.resources" value="globalMessages"/>
	
	<package name="ch6" extends="struts-default" namespace="/ch6">
		<action name="RegistValidate" class="com.gxa.edu.struts2.action.ch6.RegistValidateAction">
			<result name="input">/ch6/userRegister_validate.jsp</result>
		</action>
	</package>
</struts>


最后还需在struts.xml文件加入一段代码:
<include file="com/gxa/edu/struts2/action/ch6/struts-ch6.xml"></include>


测试结果如下图



提问:在struts.xml文件中声明method属性来指定多个逻辑处理方法,那么如果只对某一个或是多个逻辑处理方法自定义相应的数据校验功能,应该如何实现?

为了实现校验指定逻辑处理方法的功能,Struts 2框架为Action提供了validateXxx()方法。其中“Xxx”代表逻辑处理方法名。下面以一个例子来介绍重写validateXxx的使用

第一步:在原来的RegistValidateAction.java文件中添加如下两个方法

添加regist()方法
public String regist() {
	return "success";
}


添加validateRegist()方法
public void validateRegist() {
		System.out.println("===注册用户数据校验方法validateRegist===");
		if (username == null || "".equals(username)) {
			addFieldError("username" , "用户名不能为空,请填写");
		}
		if (userpassword == null || "".equals(userpassword)) {
			addFieldError("userpassword" , "密码不能为空,请填写");
		} else if (confirm_password == null || "".equals(confirm_password)) {
			addFieldError("confirm_password" , "确认密码不能为空,请填写");
		} else if (!userpassword.equals(confirm_password)) {
			addFieldError("userpassword" , "第一次密码和第二次确认密码不相同,请重新输入");
		}
		if (address == null || "".equals(address)) {
			addFieldError("address" , "地址不能为空,请填写");
		}
		ActionContext ctx = ActionContext.getContext();
		String rand = (String) ctx.getSession().get("rand");
		if (rand == null || !rand.equals(vaild)) {
			addFieldError("vaild" , "验证码输入不正确,请重新输入");
		}
}


第二步:在struts-ch6.xml文件中加入如下代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<constant name="struts.custom.i18n.resources" value="globalMessages"/>
	
	<package name="ch6" extends="struts-default" namespace="/ch6">
		<action 
name="RegistValidate" class="com.gxa.edu.struts2.action.ch6.RegistValidateAction">
			<result name="input">/ch6/userRegister_validate.jsp</result>
		</action>
		<action 
name="RegistValidate2" class="com.gxa.edu.struts2.action.ch6.RegistValidateAction" method="regist">
			<result name="input">/ch6/userRegister_validate.jsp</result>
		</action>
	</package>
</struts>


第三步:测试结果下图

  • 大小: 40.2 KB
  • 大小: 42 KB
  • 大小: 44.3 KB
  • 大小: 43.2 KB
分享到:
评论

相关推荐

    Java实训教程 Java软件开发实战 Java开发框架介绍 struts2_表单校验失败跳input视图问题共13页.pptx

    4. **利用Struts2.3.15之后的事件回调机制** - 实现步骤: - 在Struts2.3.15及以上版本中实现了`ValidationErrorAware`接口。 - 重写`actionErrorOccurred()`方法来处理校验失败的情况。 - 示例代码: ```java ...

    struts2总结大全

    通过以上知识点的详尽解析,开发者可以对Struts2有更深入的理解,从而更好地利用其特性来构建高效、可维护的Web应用。实践是检验真理的唯一标准,因此在理论学习的同时,不断通过实际项目来应用这些知识,才能真正...

    Struts1和Struts2的区别和对比

    最后,在数据校验方面,Struts1支持在ActionForm的validate方法中进行手动校验,或使用Commons Validator扩展。Struts2提供了更多样化的校验方式,包括validate方法和基于XML的XWork验证框架,以及支持子对象的校验...

    struts2 入门书籍

    ### Struts2 入门书籍知识点详述 #### 1. Struts2 框架简介 Struts2是一个开源的MVC(Model-View-Controller)架构的Web应用框架,...通过掌握上述知识点,开发者可以更有效地利用Struts2来提高开发效率和应用性能。

    转:struts1与struts2的区别

    虽然Struts2的Action仍然可以访问原始的请求和响应对象,但在大多数情况下,开发者可以利用Struts2提供的其他功能来替代直接访问`HttpServletRequest`和`HttpServletResponse`的需求。 #### 4. 可测试性的提升 - *...

    Struts2入门教程-162页.pdf

    你可以手动编写校验逻辑,也可以利用Struts2提供的数据校验框架,实现基于注解的模型验证,提高代码的可维护性和复用性。 4.1 手动完成输入校验 手动校验通常在Action类中进行,通过对用户提交的数据进行检查来确保...

    Struts2 拦截器 手动验证 或 自动验证 后台登录验证 源码

    而自动验证则是利用Struts2的内置验证框架,根据配置文件自动进行数据校验。 **手动验证**: 1. 创建自定义拦截器:首先,我们需要创建一个继承自`com.opensymphony.xwork2.interceptor.AbstractInterceptor`的类,...

    Struts2中validate数据校验的两种方法详解附Struts2常用校验器

    总的来说,Struts2提供了灵活的校验机制,开发者可以选择直接在Action类中重写`validate()`方法,或者利用XWork的Validator框架创建独立的验证配置文件,以适应不同项目的需求。通过这两种方式,可以有效地保证数据...

    struts2经典入门教程

    4. 表单验证:Struts2提供了两种表单验证方式,一种是手动完成输入校验,另一种是利用Struts2框架提供的数据校验机制。Struts2框架内置了丰富的校验器,可以根据实际需求配置相应的校验规则。 5. 国际化实现:国际...

    struts2注解小实例

    在这个小实例中,我们将深入探讨如何利用Struts2的注解来构建一个简洁而高效的Web应用。 首先,让我们了解什么是注解。在Java中,注解是一种元数据,它提供了一种安全的方法来向编译器、JVM或框架提供信息。Struts2...

    struts2入门教程

    - **Struts2框架实现数据校验**:利用Struts2内置的验证框架进行自动验证,包括字段级验证和Action级验证。 #### 五、国际化实现 - **页面的国际化**:通过资源文件实现不同语言版本的切换。 - **Action的国际化**...

    浪曦\浪曦_Struts2应用开发系列_第1讲

    - **Ajax**:利用Struts2的Ajax支持,实现页面局部更新,提高用户体验。 - **Hibernate**:整合ORM框架,简化数据库操作,例如通过Struts2-Hibernate插件实现。 - **Spring**:与Spring框架集成,实现依赖注入,...

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

    Struts2是一个非常流行的Java Web开发框架,它基于MVC(Model-View-Controller)设计模式,极大地简化了企业级应用程序的开发流程。在Struts2的2.3.15.3版本中,集成的验证框架是其核心功能之一,帮助开发者确保用户...

    修复struts2的 s-45 s-46漏洞

    可以利用自动化工具或手动检查来确认是否存在未修复的漏洞,并对修复措施进行验证。 总结起来,修复Struts2的S-45和S-46漏洞需要开发者密切关注官方的安全公告,及时升级框架版本,优化配置,强化输入验证,并启用...

    struts2验证.pdf

    除了手动校验之外,Struts2还提供了内置的Validation框架来简化校验过程。这种方式无需在每个Action类中重复编写校验逻辑,而是通过配置文件或注解来声明校验规则。 ##### 3.2 实例演示 下面是一个使用Validation...

    Struts2学习文档

    **6.7 手动完成输入检验** - **6.7.1 重写validate()** - **实现方式**:如何重写`validate()`方法来进行数据校验。 - **6.7.2 重写validateXxx()** - **实现方式**:如何重写其他特定的校验方法。 **6.8 ...

    struts2洁净包

    Struts2是一款非常流行的Java Web框架,用于构建和维护可扩展且易于管理的企业级应用程序。这个"struts2洁净包"是专为那些只...理解并掌握上述核心概念和特性,将有助于你更有效地利用Struts2框架构建高质量的Web应用。

    struts2系列教程

    - **4.2 Struts2框架实现数据校验**:利用Struts2内置的验证机制简化验证过程。 #### 六、国际化实现 - **5.1 页面的国际化**:如何根据不同语言和地区显示不同的内容。 - **5.2 Action的国际化**:如何使Action...

Global site tag (gtag.js) - Google Analytics