`

Struts2学习笔记3-数据输入校验

阅读更多
Struts2数据输入校验
首先是JSP页面,但没有使用Strust2的标签
<s:fielderror></s:fielderror>
	<form action="register.action" method="post">
		username:<input type="text" name="username"/><br/>
		password:<input type="password" name="password"/><br/>
		password:<input type="password" name="repassword"/><br/>
		age:<input type="text" name="age"/><br/>
		birthday:<input type="text" name="birthday"/><br/>
		graduation:<input type="text" name="graduation"/><br/>
		<input type="submit" value="submit"/>
	</form>


对应的Action extends ActionSupport来验证

package com.langhua.action;

import java.util.Calendar;
import java.util.Date;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction extends ActionSupport {
	private String username;
	private String password;
	private String repassword;
	private int age;
	private Date birthday;
	private Date graduation;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public Date getGraduation() {
		return graduation;
	}
	public void setGraduation(Date graduation) {
		this.graduation = graduation;
	}
	
	@Override
	public String execute() throws Exception {		
		return Action.SUCCESS;
	}
	
	@Override
	public void validate() {
		
		if(null == username){
			this.addFieldError("username", "用户名不能为空");
		}
		
		if(username.length()<6 || username.length()>10){
			this.addFieldError("username", "用户名长度不正确");
		}
		
		if(null == password || null == repassword){
			this.addFieldError("password", "密码不能为空");
		}else if(password.length()<6 || password.length()>10 || repassword.length()<6 || repassword.length()>10){
			this.addFieldError("password", "密码长度应该在6位到10位之间");
		}else if(!password.equals(repassword)){
			this.addFieldError("password", "两次输入的密码不正确");
		}
		//如果客户端输入的是字符串,自动转成0
		if(age<0 || age>150){
			this.addFieldError("age", "age不正确");
		}
		Calendar c1 = null;
		Calendar c2 = null;
		if(null != birthday){
			c1 = Calendar.getInstance();
			c1.setTime(birthday);
		}
		
		if(null != graduation){
			c2 = Calendar.getInstance();
			c2.setTime(graduation);
			if(!c2.after(c1)){
				this.addFieldError("birthday", "graduation is before birthday");
			}
		}		
	}
	public String getRepassword() {
		return repassword;
	}
	public void setRepassword(String repassword) {
		this.repassword = repassword;
	}
}


配置文件
<action name="register" class="com.langhua.action.RegisterAction">
	<result name="success">/success.jsp</result>
	<result name="input">/register.jsp</result>
</action>


下面是使用struts2标签重写的
<s:form action="register">
		<s:textfield name="username" label="username"></s:textfield>
		<s:password name="password" label="password"></s:password>
		<s:password name="repassword" label="password"></s:password>
		<s:textfield name="age" label="age"></s:textfield>
		<s:textfield name="birthday" label="birthday"></s:textfield>
		<s:textfield name="graduation" label="graduation"></s:textfield>
		<s:submit value=" submit "></s:submit>
</s:form>


配置文件
<action name="register" class="com.langhua.action.RegisterAction">
	<result name="success">/success.jsp</result>
	<result name="input">/register2.jsp</result>
</action>


struts2标签的好处就是方便

struts2的国际化

全局国际化
在struts.xml里面配置
        <constant name="struts.custom.i18n.resources" value="message"></constant>

然后就可以在SRC目录新建一个message.properties文件(实际上会放到classes下面)
xwork.default.invalid.fieldvalue = {0} error


局部国际化
在和Action同目录的地方建一个RegisterAction.properties文件,文件名和Action同名
内容
invalid.fieldvalue.age = \u5e74\u9f84\u8f93\u5165\u4e0d\u6b63\u786e
invalid.fieldvalue.birthday = \u751f\u65e5\u683c\u5f0f\u4e0d\u6b63\u786e
invalid.fieldvalue.graduation = \u6bd5\u4e1a\u65e5\u671f\u683c\u5f0f\u4e0d\u6b63\u786e

这就是局部的转换失败之后的信息

使用JDK里面的native2ascii.exe将中文转为ASCII码
这样就支持中文了


Struts2有两种错误
this.addFieldError("username", "用户名不能为空");
this.addActionError("用户名不能为空");

但是struts2标签就不支持,如
<s:textfield name="username" label="username"></s:textfield>

就不会把错误显示出来
addActionError只能使用
<s:actionerror/>

来显示,但是有的时候addFieldError,addActionError会重复错误,就用theme属性解决
<s:textfield name="username" label="username" theme="simple"></s:textfield>


Struts2也有类似struts1 DispathAction的功能
如下配置文件:
<action name="register" class="com.langhua.action.RegisterAction">
			<result name="success">/success.jsp</result>
			<result name="input">/register2.jsp</result>
		</action>
		
		<action name="add" class="com.langhua.action.RegisterAction" method="addmessage">
			<result name="success">/success.jsp</result>
			<result name="input">/register3.jsp</result>
		</action>

在Action的方法里面就加上(add.action)
public String addmessage() throws Exception {		
		return Action.SUCCESS;
	}
	
	public void validateAddmessage(){
		System.out.println("validateAddmessage");
	}

就实现了验证和业务LOGIC的处理

解决每次都要调用validate()方法来验证的问题

1.使validate()方法为空,不写他
2.把默认的validate()方法改成validateExecute()这样也能解决。

类型转换与输入校验的流程

1. 首先Struts2对客户端传来的数据进行类型转换

2. 类型转换完毕后再进行输入校验

3. 如果类型转换和输入校验都没有错误发生,那么进入execute方法(调用商业逻辑)


注意:如果类型转换不成功,也同样要进行输入校验
分享到:
评论

相关推荐

    struts2学习笔记.doc

    ### Struts2学习笔记知识点概览 #### 一、环境搭建 **1.1 Struts2简介** - **Struts2概述**:Struts2是一个开源的MVC框架,它结合了Struts 1.x、WebWork和其他一些框架的优点。Struts2的主要目标是简化Web应用程序...

    struts2学习笔记

    5. **类型转换与输入校验**:Struts2在类型转换过程中也会进行基本的校验,如检查非空、数值范围等。 **四.Struts2的核心:拦截器** 拦截器是Struts2的核心组件,它们在Action执行前后介入处理流程。拦截器可以...

    struts2综合笔记

    - **发展历程**: Struts2 是在 WebWork 框架的基础上发展起来的,因此学习 Struts2 实际上也是学习 WebWork。 #### 二、Struts2 的核心组件分析 **控制器**: - **Servlet VS Filter**: - **Servlet**: - 在内存...

    struts2学习笔记三(第3讲.Struts2的类型转换)

    在本篇“Struts2学习笔记三”中,我们将聚焦于Struts2的类型转换这一核心特性。类型转换在处理用户提交的数据时非常关键,它允许Struts2自动将请求参数转换为Java对象的属性。 在Struts2中,类型转换主要由`...

    【张冰Struts2学习笔记】0202_Struts2的三种接收用户输入的方法

    在"【张冰Struts2学习笔记】0202_Struts2的三种接收用户输入的方法"中,我们主要探讨的是如何在Struts2中有效地获取并处理用户提交的数据。以下是对这三种方法的详细解析: ### 1. 使用Action属性 Struts2的核心是...

    struts2校验器与校验框架精彩学习笔记

    本学习笔记主要探讨了Struts2中的校验器(Validator)和校验框架,帮助开发者理解如何有效地实现数据验证,确保应用程序的健壮性。 首先,我们来看Struts2的校验框架。这个框架提供了强大的功能,可以对用户输入...

    struts2学习笔记五(第5讲.Struts2的输入校验)

    在Struts2的学习过程中,第五讲主要探讨的是输入验证,这是确保应用程序数据安全和准确性的关键步骤。输入验证通常发生在客户端和服务器端,防止恶意数据的提交,并确保用户输入的数据符合预设的格式和规则。 首先...

    传智播客struts2全程学习笔记

    ### 传智播客Struts2全程学习笔记 #### Struts2的优点 1. **无侵入式设计**:与Struts1相比,Struts2的设计更为先进,它不依赖于Servlet API或Struts API,这使得Struts2更加灵活且易于集成到其他环境中。在代码...

    struts2学习笔记六(第6讲.Struts2的输入校验续一)

    在第六讲中,我们将深入探讨Struts2的输入验证机制,这是确保应用程序数据安全性和正确性的重要环节。Struts2的输入验证可以分为客户端验证和服务器端验证,两者都有其优点和适用场景。 首先,客户端验证通常使用...

    Struts2.1学习笔记

    ### Struts2.1学习笔记 #### Struts2的来源与优点 - **来源**:Struts2是在WebWork2的基础上发展起来的,它继承了WebWork2的优点,并且进行了改进,使其更适合现代Web应用程序的需求。与Struts1相比,Struts2的...

    struts2学习笔记九(第9讲.Struts2的校验框架 续)

    在第九讲中,我们将深入探讨Struts2的校验框架,这是一个非常重要的功能,它有助于确保输入数据的准确性和完整性,防止非法数据导致的系统异常。 在传统的Java web开发中,数据验证通常在服务器端进行,如Servlet或...

    struts2学习笔记八(第8讲.Struts2的校验框架)

    本讲主要探讨Struts2的校验框架,它提供了对用户输入数据进行验证的功能,确保数据的有效性和安全性。 在传统的MVC模式中,数据验证通常在控制器或模型层进行,但在Struts2中,校验逻辑被移到了专门的校验框架中,...

    Struts2学习笔记

    5. **强大的表单和验证**:Struts2提供了强大的表单处理和验证功能,可以轻松实现表单数据的封装、校验和回显。 6. **表达式语言(OGNL)**:Struts2使用OGNL(Object-Graph Navigation Language)作为默认的表达式...

Global site tag (gtag.js) - Google Analytics