- 浏览: 219637 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
Wangwei86609:
非常好的规则引擎框架,支持决策树和多线程运行规则https:/ ...
规则引擎 -
hzxlb910:
真详细,收藏哈
maven setting.xml配置说明 -
东方胜:
[b][/b]
脚本语言 Tcl -
345161974:
hyw520110 写道345161974 写道这个Visua ...
Visual Tcl Binary 完整版(完美中文支持) -
hyw520110:
345161974 写道这个Visual Tcl Binary ...
Visual Tcl Binary 完整版(完美中文支持)
struts2提供了一个时间标签:
<s:date name="todayDate" format="yyyy-MM-dd" />
但这个标签很只能在显示的时候用,但如果我想在输入框里显示时间,让用户直接修改时间,怎么弄?datepicker?选择太麻烦,我想让用户输入,并且兼容多种日期格式。还有,如果用时间标签的话,每个地方都需要指定format,如果我想修改一下格式,所有的时间显示都变,怎么弄?
翻了一下struts2的源码,和文档,找到一个办法。 com.opensymphony.xwork2.util.XWorkConverter
- * <p/> In some situations you may wish to apply a type converter globally.
- * This can be done by editing the file
- * <b>xwork-conversion.properties</b> in the root of your class path
- * (typically WEB-INF/classes) and providing a
- * property in the form of the class name of the object you wish to convert
- * on the left hand side and the class name of
- * the type converter on the right hand side. For example, providing
- * a type converter for all Point objects would mean
- * adding the following entry:
- *
- * <p/><b>com.acme.Point = com.acme.PointConverter</b>
* <p/> In some situations you may wish to apply a type converter globally. * This can be done by editing the file * <b>xwork-conversion.properties</b> in the root of your class path * (typically WEB-INF/classes) and providing a * property in the form of the class name of the object you wish to convert * on the left hand side and the class name of * the type converter on the right hand side. For example, providing * a type converter for all Point objects would mean * adding the following entry: * * <p/><b>com.acme.Point = com.acme.PointConverter</b>
XWorkConverter,先在classpath root下找xwork-conversion.properties文件,这个文件定义了全局转换。然后每遇到新的类需要转换,便查找是否有特殊的自定义转换配置。特殊自定义转换配置文件的路径是:
className.replace('.', '/') + "-conversion.properties";
比方com.acme.Point的转换配置就是classpath 下的/com/acme/Point-coversion.properties文件。
ok,这个问题好解决了。
我的xwork-coversion.properties文件:
java.util.Date=cn.jolstar.struts.type.DateTypeConverter
我的DateTypeConverter代码:
- /**
- *
- */
- package cn.jolestar.struts.type;
- import java.text.DateFormat;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.Map;
- import org.apache.log4j.Logger;
- import org.apache.struts2.util.StrutsTypeConverter;
- /**
- * @author jolestar
- *
- */
- public class DateTypeConverter extends StrutsTypeConverter {
- private static final Logger log = Logger.getLogger(DateTypeConverter.class);
- public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
- //暂时只考虑这几种日期格式
- public static final DateFormat[] ACCEPT_DATE_FORMATS = {
- new SimpleDateFormat(DEFAULT_DATE_FROMAT),
- new SimpleDateFormat("yyyy年MM月dd日"),
- new SimpleDateFormat("yyyy/MM/dd") };
- /**
- *
- */
- public DateTypeConverter() {
- }
- /*
- * (non-Javadoc)
- *
- * @see org.apache.struts2.util.StrutsTypeConverter#convertFromString(java.util.Map,
- * java.lang.String[], java.lang.Class)
- */
- @Override
- public Object convertFromString(Map context, String[] values, Class toClass) {
- if (values[0] == null || values[0].trim().equals(""))
- return null;
- for (DateFormat format : ACCEPT_DATE_FORMATS) {
- try {
- return format.parse(values[0]);
- } catch (ParseException e) {
- continue;
- } catch (RuntimeException e) {
- continue;
- }
- }
- log.debug("can not format date string:" + values[0]);
- return null;
- }
- /*
- * (non-Javadoc)
- *
- * @see org.apache.struts2.util.StrutsTypeConverter#convertToString(java.util.Map,
- * java.lang.Object)
- */
- @Override
- public String convertToString(Map context, Object o) {
- if (o instanceof Date) {
- SimpleDateFormat format = new SimpleDateFormat(
- DEFAULT_DATE_FORMAT);
- try {
- return format.format((Date) o);
- } catch (RuntimeException e) {
- return "";
- }
- }
- return "";
- }
- }
/** * */ package cn.jolestar.struts.type; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import org.apache.log4j.Logger; import org.apache.struts2.util.StrutsTypeConverter; /** * @author jolestar * */ public class DateTypeConverter extends StrutsTypeConverter { private static final Logger log = Logger.getLogger(DateTypeConverter.class); public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; //暂时只考虑这几种日期格式 public static final DateFormat[] ACCEPT_DATE_FORMATS = { new SimpleDateFormat(DEFAULT_DATE_FROMAT), new SimpleDateFormat("yyyy年MM月dd日"), new SimpleDateFormat("yyyy/MM/dd") }; /** * */ public DateTypeConverter() { } /* * (non-Javadoc) * * @see org.apache.struts2.util.StrutsTypeConverter#convertFromString(java.util.Map, * java.lang.String[], java.lang.Class) */ @Override public Object convertFromString(Map context, String[] values, Class toClass) { if (values[0] == null || values[0].trim().equals("")) return null; for (DateFormat format : ACCEPT_DATE_FORMATS) { try { return format.parse(values[0]); } catch (ParseException e) { continue; } catch (RuntimeException e) { continue; } } log.debug("can not format date string:" + values[0]); return null; } /* * (non-Javadoc) * * @see org.apache.struts2.util.StrutsTypeConverter#convertToString(java.util.Map, * java.lang.Object) */ @Override public String convertToString(Map context, Object o) { if (o instanceof Date) { SimpleDateFormat format = new SimpleDateFormat( DEFAULT_DATE_FORMAT); try { return format.format((Date) o); } catch (RuntimeException e) { return ""; } } return ""; } }
这样,从字符串转换为日期对象的时候,会尝试上面列出的多种日期格式,但输出的时候,则会统一按照DEFAULT—DATE—FORMAT转换。 需要修改格式,只需要修改DEFAULT—DATE—FORMAT。当然,你也可以把它方在配置文件里,便于修改。
了解了这一点,其实也就 明白了struts的类型转换模式。然后,无论是字符串id到持久化对象的转换,还是自定义的字符串到对象之间的转换,都容易了。
发表评论
-
pushlet
2012-05-31 14:56 1170基于pushlet的文件监控系统的研究与实现 http ... -
@Transactional spring 配置事务
2012-04-25 11:15 2091@Transactional spring 配置事 ... -
Spring的组件自动扫描机制
2012-04-09 17:47 0Spring将所有的bean都纳入到IOC中创建、管理和维护。 ... -
struts&rest
2012-04-03 00:11 794深入浅出REST http://www.infoq. ... -
文件转码
2011-11-16 09:55 2008工程项目太多,各工程或各文件编码不统一时,可运行本工具类,把工 ... -
安装和使用SpringIDE-------III
2011-07-29 10:40 8412. 编写类文件 · ... -
安装和使用SpringIDE-------II
2011-07-29 10:39 683显示图表,如图: 发表于 @ 2006 ... -
安装和使用SpringIDE
2011-07-29 10:36 1130这篇文章谈谈如何安装与使用SpringIDE。作为辅助Sp ... -
使用AJDT简化AspectJ开发
2011-07-29 10:05 1037面向方面编程(AOP)可用来解决当今的 许多 应用需求 ... -
利用Apache的CLI来处理命令行
2011-05-16 17:02 983CLI是Jakarta Commons中的一个子类。如果你仅仅 ... -
CGlib简单介绍
2011-04-28 08:37 847CGlib概述:cglib(Code Generation L ... -
Java ClassLoader
2011-04-25 18:24 1005当Java编译器编译好.class ... -
Template模式与Strategy模式
2011-04-20 16:23 673template method模式和stra ... -
Ibatis读写CLOB数据
2011-03-21 14:21 1042转载:http://www.iteye.com/topic/7 ... -
轻松构建和运行多线程的单元测试
2011-03-18 22:09 977背景 并行程序 并行程序是指控制计算机系统中两个或多个分别 ... -
Cairngorm3中文简介
2011-03-18 22:07 1025官方原文地址:http://opensource.adobe. ... -
ibator改造之返回数据库注释和数据库分页
2010-12-23 17:24 2229转载:http://www.iteye.com ... -
quatrz 任务监控管理 (2)
2010-10-28 23:28 1445在《Quartz 任务监控管理 (1)》http://www. ... -
Quartz任务监控管理 (1)
2010-10-28 23:27 1299转载:http://sundoctor.iteye.com/b ... -
Quartz 在 Spring 中如何动态配置时间
2010-10-28 23:25 1683转载: http://sundoctor.iteye.com ...
相关推荐
2. **配置转换器**:为了让Struts2知道何时使用自定义的转换器,我们需要在配置文件(通常是struts.xml)中进行声明。可以使用`<conversion-property>`标签来指定转换器应用于哪个字段,或者全局注册转换器。 ```...
在实际开发中,Struts2的类型转换有时会遇到一些问题,例如空值处理、格式错误等。对于空值,Struts2会提供默认值或允许字段为空;对于格式错误,Struts2会抛出`ConversionException`,开发者可以捕获并处理这个异常...
Struts2是一个非常流行的Java Web框架,它提供了一种优雅的方式来构建MVC(模型-视图-控制器...通过自定义类型转换器,我们可以解决框架默认转换机制无法满足的特殊需求,如复杂的对象序列化、自定义格式的日期处理等。
这篇博客“Struts2数据类型转换器”可能深入探讨了这个主题,虽然具体的细节无法在此给出,但我们可以根据Struts2中数据类型转换的工作原理来展开讨论。 在Java Web开发中,用户通过表单提交的数据通常是字符串形式...
例如,如果你有一个`java.util.Date`类型的属性,但用户输入了一个无效的日期字符串,Struts2在尝试将字符串转换为日期时会抛出异常。 2. **Struts2的类型转换机制** Struts2使用OGNL(Object-Graph Navigation ...
在本案例中,我们将深入探讨“struts2注册转换器”,特别是如何将特定的日期格式如"20110202"转换为日期对象。 首先,了解Struts2中的类型转换器。Struts2框架提供了内置的转换器,可以处理基本类型和某些复杂类型...
这些资源可以帮助开发者理解并解决在处理日期字段时可能出现的格式问题,避免因为日期格式不匹配而导致的错误。 总的来说,Struts日期转换器是Struts框架中一个重要的功能,它使得用户界面和后端模型之间的日期数据...
在Struts2中,类型转换和国际化是两个重要的特性,用于处理数据类型之间的转换以及多语言环境下的内容显示。 **类型转换**是Struts2处理请求参数与Action类属性之间数据类型不匹配的过程。当用户通过表单提交请求时...
例如,如果你有一个日期字段,你可以创建一个DateConverter,将字符串格式的日期转换为java.util.Date对象。 除了自定义转换器,Struts2还提供了一系列内置的转换器,可以处理基本类型和常见的Java对象,如...
8. **最佳实践**:为了避免日期转换问题,开发者可以考虑使用标准的ISO 8601日期时间格式,或者使用特定的日期选择控件以确保用户输入的格式一致。 9. **工具使用**:博文中的“工具”标签可能是指开发者可以使用的...
Struts2的内建类型转换涵盖了大部分常见类型,包括但不限于String、boolean/Boolean、char/Character、整数类型(int/Integer、float/Float、long/Long、double/Double)、日期(使用当前时区的SHORT格式)以及数组...
在Struts2框架中,处理日期、时间和数字的格式化是一项常见的任务,这涉及到前端展示和后端数据处理的一致性。Struts2提供了一系列工具和API,使得开发者能够轻松地进行格式化工作。以下是对Struts2中日期、时间和...
Struts2提供了内置的转换器(Converters)来实现这一目标,例如将字符串转换为整数、日期等。 2. **全局转换器的注册**:要定义全局转换器,你需要在`struts.xml`配置文件中声明它。这通常是在`<constant>`标签内...
在实际项目中,我们可能会遇到更复杂的数据转换情况,例如日期格式的转换、货币金额的转换等。此时,自定义类型转换器能提供灵活的解决方案,帮助我们更好地管理和控制数据转换的过程,提高代码的可维护性和健壮性。...
这个实例项目展示了如何在实际应用中结合Struts2、国际化、类型转换以及Struts2自定义标签来实现用户管理功能,包括用户数据的增删改查。 首先,我们来看Struts2的核心概念。Struts2作为MVC框架,它负责处理HTTP...
Struts2的时间日期转换器(`StrutsTypeConverter`实现)默认支持多种日期格式,例如"yyyy-MM-dd"、"MM/dd/yyyy"等。当用户在表单中输入日期数据时,Struts2会尝试根据配置的日期格式将这些数据转换为日期对象。如果...
在Struts2框架中,自定义类型转换器是开发者为了满足特定需求,对框架默认的类型转换机制进行扩展的一种方式。Struts2允许我们创建自己的转换器类来处理输入数据,确保模型对象的属性能够正确地被转换为预期的数据...
对于日期和时间类型,Struts2提供了`DateConverter`和`CalendarConverter`。可以使用`format`属性指定日期格式,以便正确解析用户的输入。 8. **集合和数组转换** 对于集合和数组,Struts2会尝试将每个元素转换为...
Struts2框架已经内置了一系列常见的类型转换器,例如对于基本数据类型(如int、float等)、日期类型、布尔类型等都有现成的支持。这些转换器通常能够满足大多数应用场景的需求。然而,对于一些自定义的数据类型或...