`

struts中日期转换的问题

阅读更多
最近几个月都在忙项目..由于公司人手不多..开发也才几个!从需求到开发全部都得一手包办!!趁有时间总结下最近觉得有用的东西...可能会分几篇文章来写:这里先谈下日期的问题!
一般我们做项目总是会遇到时间的操作.例如账户登录时间.日志记录时间.等等
而如果我们存放到数据库中是Date类型的数据(因为这是比较完整的时间数据).我们显示给客户看到时间一般会进行处理.应该有些显示没有必要精确到秒之类的.还有添加数据使用到一些时间控件的时候读取到底数据也将是字符串形式了.这时候我们必须在后台进行字符串到Date的转换..一般我们会编写一个转换时间的类如:
package com.changtu.publicplatform;

import java.text.SimpleDateFormat;
import java.util.Date;

// 日期帮助类
public class DateUtil {

	/**
	 * 将java.util.Date 转换 yyyy-MM-dd 格式的字符串
	 * @param date: java.util.Date
	 * @return
	 */
	public static String dateToStr(Date date) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		return sdf.format(date);
	}
/**
     * 字符串转日期
     * @param str 格式: 2009-08
     * @return
     */
    public static Date strToDate(String str) {
    	Date date = null;
    	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
    	try {
			date = sdf.parse(str);
		} catch (ParseException e) {
			e.printStackTrace();
		}
    	return date;
    }
    
}


而每次都需要进行这个工具类方法的调用转换...操作多了好像非常繁琐.修改时候也麻烦

这时候便想到struts1.2应该会有支持这中日期转换的吧!上网查了下资料.发现Converter将可以帮助到我们.
但Converter只支持一些基本的类型,甚至连java.util.Date类型也不支持。而且它比较笨的一个地方是当遇到不认识的类型时,居然会抛出异常来。

对于Date类型,我参考它的sqldate类型实现了一个Converter,而且添加了一个设置日期格式的函数。

ConvertUtils.register(new DateConvert(), java.util.Date.class);
register(Converter converter, java.lang.Class clazz)
为指定类型clazz注册转换器converter。如果clazz已经存在一个对应的转换器,那么converter,将覆盖原来的转换器。也就是说,我们可以为String,Double创建自定义的类型转换器,并在注册后进行使用。
这时候我们可以创建自己的转换器:UtilDateConverter
public class UtilDateConverter implements Converter {
	
	private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");//这里可以进行扩展

	public Object convert(Class type, Object value) {
		if (value == null) {
			return value;
		}
		if (value instanceof Date) {
			return value;
		}
		if (value instanceof String) {
			try {
				return format.parse((String)value);
			} catch (ParseException e) {
				e.printStackTrace();
			}
		}
		return null;
	}

}

然后进行注册UtilDateConverterInitServlet
public class UtilDateConverterInitServlet extends HttpServlet {

	@Override
	public void init() throws ServletException {
		 ConvertUtils.register(new UtilDateConverter(), Date.class);
	}

}

最后在web.xml进行配置.
 <servlet>
    <servlet-name>utilDateConverter</servlet-name>
    <servlet-class>com.changtu.serviceplatform.web.UtilDateConverterInitServlet</servlet-class>
    <load-on-startup>3</load-on-startup>
  </servlet> 

就将生效.可以在ActionForm中直接使用Date类型.在页面中符合你转换器格式的字符串在使用ActionForm调用时候将自己转换为Date的类型(在web项目中,如果没有注册日期的话,formbean中将不支持java.util.Date类型,并抛出异常。)
上面注册器只是将页面字符串转换为Date而在显示页面的时候将要使用日期用字符串形式显示的时候就可以使用jstl标签提供转换:
<%@ taglib prefix="fmt"  uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:formatDate value="${logForm.createDate }" pattern="yyyy-MM-dd" />

也有简便的注册多个格式日期的方法:
DateConverter d = new DateConverter();     
String[] datePattern = { "yyyy-mm-dd", "yyyy/mm/dd", "yyyy.mm.dd" };     
d.setPatterns(datePattern);     
ConvertUtils.register(d, java.util.Date.class);  

ConvertUtils简单使用可以看下
http://www.itepub.net/html/kaifajingcui/Java/2006/0514/31616.html

下一篇文章将讨论下pager-taglib这个分页框架的使用和其一些问题
分享到:
评论

相关推荐

    struts日期转换器

    "Struts日期转换器"就是这样一个组件,用于处理日期类型的字段,确保它们在从页面传递到Action类的过程中能够正确地转换格式。 在Struts中,数据转换是通过`ValueStack`和`Converter`接口来实现的。默认情况下,...

    struts2类型转换和国际化

    在Struts2中,类型转换和国际化是两个重要的特性,用于处理数据类型之间的转换以及多语言环境下的内容显示。 **类型转换**是Struts2处理请求参数与Action类属性之间数据类型不匹配的过程。当用户通过表单提交请求时...

    struts2注册转换器

    在本案例中,我们将深入探讨“struts2注册转换器”,特别是如何将特定的日期格式如"20110202"转换为日期对象。 首先,了解Struts2中的类型转换器。Struts2框架提供了内置的转换器,可以处理基本类型和某些复杂类型...

    struts2 类型转换器

    标题中的“Struts2 类型转换器”主要指的是Struts2框架中处理请求参数到Action类属性绑定过程中的类型转换机制。在HTTP请求中,表单数据通常以字符串形式传递,而Action类的属性可能是各种类型,如整型、浮点型、...

    struts2 Date转换问题

    通过理解这些知识点,开发者可以更好地应对Struts2框架中遇到的日期转换问题,提高应用程序的健壮性和用户体验。如果想要了解更多细节,建议直接阅读博文“https://happywaterlife.iteye.com/blog/1602352”,博主...

    struts2 转换器

    例如,如果你有一个日期字段,你可以创建一个DateConverter,将字符串格式的日期转换为java.util.Date对象。 除了自定义转换器,Struts2还提供了一系列内置的转换器,可以处理基本类型和常见的Java对象,如...

    struts2全局转换的问题

    Struts2提供了内置的转换器(Converters)来实现这一目标,例如将字符串转换为整数、日期等。 2. **全局转换器的注册**:要定义全局转换器,你需要在`struts.xml`配置文件中声明它。这通常是在`&lt;constant&gt;`标签内...

    STRUTS2类型转换

    Struts2内置了多种类型转换,可以将HTTP请求中的字符串数据转换为各种基本类型和复杂类型,如日期、数组、集合等。然而,当框架的内置转换器无法满足特定需求时,开发者需要自定义类型转换器。 类型转换在Struts2中...

    Struts处理类型转换错误,如时间转换

    例如,如果你有一个`java.util.Date`类型的属性,但用户输入了一个无效的日期字符串,Struts2在尝试将字符串转换为日期时会抛出异常。 2. **Struts2的类型转换机制** Struts2使用OGNL(Object-Graph Navigation ...

    Struts自定义类型转换器

    本文主要介绍Struts1和Struts2中的自定义类型转换器,并探讨其实现机制。 #### 二、Struts1中的自定义类型转换器 在Struts1中,自定义类型转换器主要是通过继承`com.sun.org.apache.commons.beanutils.Converter`...

    struts2自定义类型转换器

    自定义类型转换器允许我们更灵活地处理数据绑定过程中的类型转换问题,提高代码的可维护性和可扩展性。通过以上步骤,开发者可以有效地将前端输入的字符串转换为Date对象,满足了项目中的特定需求。同时,这也展示了...

    Struts2实例 国际化 类型转换 struts标签

    这个实例项目展示了如何在实际应用中结合Struts2、国际化、类型转换以及Struts2自定义标签来实现用户管理功能,包括用户数据的增删改查。 首先,我们来看Struts2的核心概念。Struts2作为MVC框架,它负责处理HTTP...

    struts2类型转换

    本篇文章将深入探讨Struts2中的类型转换机制。 1. **类型转换的概念** 类型转换是指将一个数据类型的值转换为另一个数据类型的过程。在网络请求中,用户输入的数据通常是字符串类型,而服务器端的Action类属性可能...

    struts2类型转换 拦截器 校验的例子

    在Struts2中,用户通过表单提交的数据通常是字符串,而服务器端处理时往往需要将其转化为其他类型,如整型、浮点型或日期等。Struts2内置了一套类型转换机制,能够自动将字符串数据转化为预设的类型。如果默认的转换...

    struts2的日期回显

    `params`拦截器会尝试从请求中获取名为`birthDate`的参数,并将其转换为日期类型,然后赋值给Action的`birthDate`属性。如果验证失败,比如日期格式不正确,Struts2会将当前的Action实例(包含了用户的原始输入)...

    struts2自定义数据类型转换练习

    在实际项目中,我们可能会遇到更复杂的数据转换情况,例如日期格式的转换、货币金额的转换等。此时,自定义类型转换器能提供灵活的解决方案,帮助我们更好地管理和控制数据转换的过程,提高代码的可维护性和健壮性。...

    struts2(时间日期类型转换器)

    在实际应用中,我们通常会创建一个自定义的日期转换器类,然后在Struts2的XML配置文件(如struts.xml或struts-default.xml)中注册它。这样,Struts2在处理日期类型字段时会使用我们定义的转换规则。 下面是一个...

    struts2枚举值、日期值转换示例

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,...在实际开发中,自定义转换器是解决枚举和日期转换问题的一个有效途径。同时,熟悉这些自定义机制也有助于更好地理解和掌握Struts2框架的工作原理。

    struts2数据类型转换器

    这篇博客“Struts2数据类型转换器”可能深入探讨了这个主题,虽然具体的细节无法在此给出,但我们可以根据Struts2中数据类型转换的工作原理来展开讨论。 在Java Web开发中,用户通过表单提交的数据通常是字符串形式...

Global site tag (gtag.js) - Google Analytics