前不久在Spring的SimpleTypeConverter基础上扩展实现了我想要的对象类型的转换,当然前提是他们能够互转,一般我们不会要求把"abc"转成数字的吧。
下面是spring支持的一些基本的类型转换:
Integer <-> String
Boolean <-> String
Long <-> String
Long <-> Integer
...
在这个基础上扩展了日期与字符串、日期与long、util.Date与sql.Date互转,代码如下:
public class CustomDateEditor extends PropertyEditorSupport {
private DateFormat formatter;
public CustomDateEditor(String dateFormat) {
this.formatter = new SimpleDateFormat(dateFormat);
}
/**
* <pre>
* 对象转日期
* java.sql.Date -> java.util.Date
* String -> java.util.Date
* Long -> java.util.Date
* Calandar -> java.util.Date
* </pre>
*/
@Override
public void setValue(Object o) {
if (o instanceof java.sql.Date) {
super.setValue(new Date(((java.sql.Date) o).getTime()));
} else if (o instanceof String) {
setAsText((String) o);
} else if (o instanceof Long) {
super.setValue(new Date((Long) o));
} else if (o instanceof Calendar) {
super.setValue(((Calendar) o).getTime());
} else {
super.setValue(o);
}
}
/**
* 字符串转日期
*/
@Override
public void setAsText(String dateStr) {
if (dateStr != null) {
try {
super.setValue(formatter.parse(dateStr));
} catch (ParseException e) {
throw new IllegalArgumentException("Could not parse date: " + e.getMessage());
}
} else {
super.setValue(null);
}
}
/**
* 日期转字符串
*/
public String getAsText() {
Object v = this.getValue();
return v == null ? "" : formatter.format((Date) v);
}
}
public class CustomSqlDateEditor extends PropertyEditorSupport {
private DateFormat formatter;
public CustomSqlDateEditor(String dateFormat) {
this.formatter = new SimpleDateFormat(dateFormat);
}
/**
* 对象转sql.Date
*/
@Override
public void setValue(Object o) {
if (o instanceof java.util.Date) {
super.setValue(new Date(((java.util.Date) o).getTime()));
} else if (o instanceof String) {
setAsText((String) o);
} else if (o instanceof Long) {
super.setValue(new Date((Long) o));
} else if (o instanceof Calendar) {
super.setValue(new Date(((Calendar) o).getTimeInMillis()));
} else {
super.setValue(o);
}
}
/**
* 字符串转sql.Date
*/
@Override
public void setAsText(String dateStr) {
if (dateStr != null) {
try {
super.setValue(new Date(formatter.parse(dateStr).getTime()));
} catch (ParseException e) {
throw new IllegalArgumentException("Could not parse date: " + e.getMessage());
}
} else {
setValue(null);
}
}
/**
* sql.Date转字符串
*/
public String getAsText() {
Object v = this.getValue();
return v == null ? "" : formatter.format((Date) v);
}
}
再将我们定制的editor注册到converter中,从而定制自己的类型转换方式。
分享到:
相关推荐
自定义类型转换可以通过实现特定接口来完成,比如继承`org.apache.struts2.util.ConversionError`和`org.apache.struts2.util.TypeConverter`等。 #### 二、局部类型转换器与全局类型转换器的区别 **2.1 局部类型...
自定义类型转换器需要实现`org.apache.struts2.util.TypeConverter`接口,或者继承`org.apache.struts2.convention.converters.DefaultConversionProvider`基类,覆盖`convertValue()`方法。然后,通过在Action类或...
1. 创建转换器类:继承`org.apache.struts2.util.TypeConverter`,并覆盖其`convertValue()`方法,这个方法会进行实际的类型转换工作。 2. 注册转换器:有两种方式注册自定义转换器,一是通过XML配置文件,在`struts...
类型转换在Struts2中主要通过实现ognl.TypeConverter接口来完成。当需要自定义转换器时,你需要创建一个类并实现这个接口,提供convertFromString和convertToString两个方法,分别处理字符串到目标类型的转换和目标...
Struts2是一个强大的MVC框架,它在处理Web应用程序时提供了许多便利,其中包括类型转换功能。类型转换是将用户输入的数据自动转化为服务器端处理所需的类型,这样可以避免手动转换带来的繁琐工作。本篇文章将深入...
3. 注册类型转换器:如果需要自定义类型转换,你需要创建一个新的类实现`TypeConverter`接口,然后在Action类或struts.xml中注册这个转换器。 4. 编写JSP页面:创建一个简单的HTML表单,用于用户输入数据。表单字段...
Struts2是一个强大的MVC框架,它在处理用户请求时提供了丰富的功能,其中包括类型转换(Converter)。类型转换是Struts2框架中一个重要的特性,它允许我们把前端表单提交的数据自动转换为后端Java对象的属性。在这个...
创建自定义数据类型转换器需要实现`org.apache.struts2.util.TypeConverter`接口。这个接口包含了一个核心方法`convertValue()`,该方法负责将接收到的值转换为目标类型。我们还需要在类上添加`@Override`注解以确保...
这篇博客“Struts2数据类型转换器”可能深入探讨了这个主题,虽然具体的细节无法在此给出,但我们可以根据Struts2中数据类型转换的工作原理来展开讨论。 在Java Web开发中,用户通过表单提交的数据通常是字符串形式...
当我们需要对默认类型转换器的功能进行扩展或者处理自定义类型时,就需要自定义类型转换器。 自定义类型转换器是Struts 2的核心特性之一,允许开发者根据业务需求定制数据转换规则。以下将详细介绍如何创建、注册...
在Struts2中,类型转换是一项关键功能,它允许框架将用户输入的数据自动转换为应用程序所需的类型。这使得开发人员可以更加专注于业务逻辑,而不用过于担心数据类型匹配的问题。 类型转换在Struts2中的主要作用是...
- **DefaultTypeConverter类**:这是一个实现了`TypeConverter`接口的类,它提供了默认的类型转换逻辑。开发者可以在继承此类的基础上,重写`convertValue`方法来实现特定的转换逻辑。 ```java public class ...
实现自定义类型转换器有两种主要方式:一是直接实现`TypeConverter`接口;二是继承`DefaultTypeConverter`实现类,该类已经实现了`TypeConverter`接口。`StrutsTypeConverter`是一个抽象类,作为`DefaultConverter`...
开发者可以实现`org.apache.struts2.util.TypeConverter`接口或继承`org.apache.struts2.util.StrutsTypeConverter`抽象类来创建自己的类型转换器。然后,通过在Action类或者全局配置文件(struts.xml)中注册这个...
Convert类提供了各种静态方法,可以直接将一种类型转换为另一种类型,而TypeConverter类则用于自定义类型的转换规则。 在实际开发中,理解数值类型、装箱拆箱以及类型转换对于编写高效、安全的代码至关重要。通过...
总的来说,Struts2对OGNL的封装主要体现在TypeConverter上,这是一个强大的工具,允许开发者自定义数据类型转换,以适应各种复杂的业务场景。理解并熟练使用TypeConverter能够极大地提升Struts2应用的灵活性和可维护...
### Struts自定义类型转换器 #### 一、概述 在Web开发中,表单提交的数据通常是字符串形式的,而在业务逻辑处理时往往需要将这些数据转换为其他类型的对象(如日期、数字等)。Struts框架为了更好地处理这种类型...
类型转换在WebWork中通过`ConversionAwareActionForm`和`TypeConverter`接口实现。当一个ActionForm接收到请求参数时,WebWork会尝试找到相应的TypeConverter来处理这个转换。TypeConverter是WebWork中负责将一个...
在Struts2中,类型转换是通过`ValueStack`和`TypeConverter`接口实现的。`ValueStack`负责管理Action对象,而`TypeConverter`接口则定义了如何将字符串转换为特定类型的逻辑。当Action属性需要被赋值时,Struts2会...