`
zhaolianyang
  • 浏览: 97443 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多
Struts2的输入校验续一

说明:
遇到类型转换错误的时候(也就是说不能进行类型转换),struts2框架自动生成一条错误信息,并且将该错误信息放到addFieldError里面。

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

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

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

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


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

一、修改注册页面register.jsp:
<body>
	
	<table align="center" width="40%">
		<tr>
			<td style="color:red">
			<s:fielderror></s:fielderror>
			</td>
		</tr>
	</table>
	
	<form action="register.action" method="post">
		<table align="center" width="40%" border="1">
			<tr>
				<td>username:</td>
				<td><input type="text" name="username" value="${username}"></td>
			</tr>
			<tr>
				<td>password:</td>
				<td><input type="password" name="password"></td>
			</tr>
			<tr>
				<td>repassword:</td>
				<td><input type="password" name="repassword"></td>
			</tr>
			<tr>
				<td>age:</td>
				<td><input type="text" name="age"></td>
			</tr>
			<tr>
				<td>birthday:</td>
				<td><input type="text" name="birthday"></td>
			</tr>
			<tr>
				<td>graduation:</td>
				<td><input type="text" name="graduation"></td>
			</tr>
			<tr>
				<td><input type="submit" value=" submit "></td>
				<td><input type="reset" value=" reset "></td>
			</tr>
		</table>
	</form>
	
  </body>


说明:年龄输入的为字母格式的字符是,struts2会无法进行自动的类型转换,所以会提示“Invalid field value for field "age". ”这样的错误,这种提示信息是struts2默认的提示错误信息,是不够友好的,所以要自己定义新的提示信息,把struts默认的替换掉:
二、在src根目录下创建一个全局性的国际化的文件message.properties(这种方法还是有缺陷的):
xwork.default.invalid.fieldvalue={0} error

其中:xwork.default.invalid.fieldvalue是固定的,0表示的是哪个属性发生类型转化错误就显示哪个的属性。
三、在struts.xml文件中进行配置,代码如下:
<constant name="struts.custom.i18n.resources" value="message">
	
	</constant>
这里的message就是上面定义的message.properties文件。
四、要在对应的Action的目录com.test.Action下创建局部的国际化的验证文件RegisterAction.properties:
invalid.fieldvalue.age=age conversion error
还是age的类型转化为例的。
注意:在正式的项目开发中一般使用的都是局部的类型转化验证。
五、用struts2标签来创建注册页面,重新创建一个struts2标签的注册页面register2.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'register2.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
  
    <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="repassword"></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>
    
  </body>
</html>

六、修改下struts.xml的文件:
<action name="register" class="com.test.action.RegisterAction">
		<result name="success">/success.jsp</result>
		<result name="input">/register2.jsp</result>
	</action>

七、完善验证的信息RegisterAction.properties:
invalid.fieldvalue.age=\u5e74\u9f84\u4fe1\u606f\u8f93\u5165\u4e0d\u6b63\u786e
invalid.fieldvalue.birthday=\u751f\u65e5\u65e5\u671f\u8f93\u5165\u9519\u8bef
invalid.fieldvalue.graduation=\u6bd5\u4e1a\u65f6\u95f4\u65e5\u671f\u8f93\u5165\u9519\u8bef

八、因为验证有不合适的地方(重复),所以修改一下RegisterAction.java的验证:
package com.test.action;

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

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 String getRepassword() {
		return repassword;
	}

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

	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 SUCCESS;
	}

	@Override
	public void validate() {
		
		if(null == username || username.length() < 6 || username.length() > 10){
			this.addFieldError("username", "username invalid");
		}
		if(null == password || password.length() <6 || password.length() > 10){
			this.addFieldError("password", "password invalid");
		}
		else if(null == repassword || repassword.length() < 6 || repassword.length() > 10){
			this.addFieldError("repassword", "repassword invalid");
		}
		else if(!password.equals(repassword)){
			this.addFieldError("password", "two passwords not the same");
		}
		if(age <= 0 || age > 150){
			this.addFieldError("age", "age should be between 1 and 150");
		}
//		if(null == birthday){
//			this.addFieldError("birthday", "birthday invalid");
//		}
//		if(null == graduation){
//			this.addFieldError("graduation", "graduation invalid");
//		}
		if(null != birthday && null != graduation){
			Calendar c1 = Calendar.getInstance();
			c1.setTime(birthday);
			
			Calendar c2 = Calendar.getInstance();
			c2.setTime(graduation);
			
			if(!c1.before(c2)){
				this.addFieldError("birthday", "birthday should be before graduation");
			}
		}
	}
}

最终的文件如下:
2
2
分享到:
评论

相关推荐

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

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

    struts2学习笔记.doc

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

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

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

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

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

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

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

    struts2学习笔记

    **六.Struts2的属性驱动和模型驱动** 1. **属性驱动**:Action类中的字段直接对应请求参数,Struts2自动将请求参数值填充到Action字段。 2. **模型驱动**:使用一个公共对象作为模型,Action类持有这个模型的引用,...

    传智播客struts2全程学习笔记

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

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

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

    struts2综合笔记

    - **lib**: 包含 Struts2 框架的核心库和第三方插件库。 - **src**: 包含 Struts2 框架的全部源代码。 #### 五、深入理解 Struts2 - **灵活度**: - Struts2 的知识点虽然分散,但其灵活性和扩展性非常强。 - **...

    Struts2_学习笔记.zip

    这个"Struts2_学习笔记"包含了关于Struts2框架的深入学习资料,是理解并掌握Struts2核心概念和技术的关键。 Struts2的核心设计理念是模型-视图-控制器(MVC)架构模式,它简化了Java Web开发,将业务逻辑、数据展示...

    Struts2超详细学习笔记分享(献给自学新人)

    本篇超详细学习笔记将带你逐步深入理解Struts2的核心概念和运作机制。 首先,让我们了解Struts2的基本特性。Struts2是一个基于Servlet的框架,它通过将JSP作为视图(View),Servlet作为控制器(Controller),并将...

    Struts2学习笔记

    Struts2是一个强大的MVC框架,它在Java Web开发中被广泛应用。相比于它的前身Struts1.x,Struts2提供了一系列改进和增强的功能。在本文中,我们将深入探讨Struts2的核心组件——Action,以及如何配置和使用它来构建...

    Struts2.1学习笔记

    Action校验则确保用户输入符合预期,可以通过编程方式或XML配置实现,Struts2提供了丰富的校验器来简化这一过程。 #### 文件上传与国际化支持 文件上传在Web应用中十分常见,Struts2提供了内置的支持,可以轻松...

    struts2学习笔记一

    Struts2是Java开发中的一个强大的MVC(Model-View-Controller)框架,它极大地简化了基于Java的企业级应用程序的构建过程。作为Apache软件基金会的开源项目,Struts2是在Struts1的基础上,结合WebWork的技术发展起来...

Global site tag (gtag.js) - Google Analytics