struts的转换器
在传递表单数据的时候会遇到这种情况。在formbeen中或者实体类中定义的类型是Date,Integer等对象类型。那么类型为String类型的传递进去的时候无法完成数据转换。这就需要使用struts的转换器。
转换器的使用要先定义一个converter,只要实现Converter接口,并在convert方法中做好处理,就能完成一个converter。例如下面是一个日期转换器。
public class DateConvert implements Converter {
public DateConvert(String pattern){
super();
this.pattern = pattern;
}
private String pattern;
public Object convert(Class clazz, Object obj) {
String src = (String)obj;
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date dest = null;
if(clazz == Date.class){
try {
dest = sdf.parse(src);
} catch (ParseException e) {
// TODO Auto-generated catch block
}
}
return dest;
}
}
定义好converter以后要在项目中注册。为了保证项目启动后最初就进行注册,可以考虑在ActionServlet中完成注册。所以我们可以写一个继承了ActionServlet类的Servelet类,并重构init方法进行注册。要注意的是,如果在web.xml文件中设置了初始参数convertNull为true。注册的代码要写在super.init()之后。因为ActionServlet的init方法会调用一个ConvertUtils.deregister()方法,把所有的转换器清除。
以上面的日期转换器为例,具体注册的代码如下:
ConvertUtils.register(new DateConvert("yyyy-MM-dd"), Date.class);
注册完的同时,不要忘记把自己定义的ActionServlet在web.xml文件中配置好。这样,表单中的日期文本就可以传入Date类型的属性中了。
但是还有一个问题,当发生错误需要进行数据回显时,<html:text>标签会从formbeen中读取数据,这个时候读取出的是Date类型的toString方法显示出的值,不是原来自己填写的值了。
要想进行双向转换,struts1已经没法做到了。struts2才可以做到。要在struts1达到我们预期的效果,可以使用其他的途径。
例如使用jstl的fmt标签。把formbeen中的Date类型的数据按一定格式转成String类型,然后再赋值给<html:text>。
示例代码如下:
<fmt:formatDate value="${userForm.user.birthday}" type="date" pattern="yyyy-MM-dd" var="birthday"/>
日期:<html:text property="user.birthday" value="${birthday}"></html:text> <br/>
上面有提到一个convertNull的参数。这个参数的作用要说明一下。
当我们在实体类或者formbeen中定义属性时,若是基本数据类型,那么struts标签在初始化时会先初始化formbeen,那么这个基本数据类型会先初始化为默认值。比如int类型就是0.那么在载入表单页面时,数据就会显示为0.这样非常不理想,明明没有填入任何数据,会显示出0.那么我们可以定义这个基本数据类型为包装类型,比如int就可以定义为Integer。它的默认值是null,null在struts的表单标签中是不显示的。但是当我们在这个标签中不填任何数据,当提交发生错误需要数据回显时问题就来了。struts会自动把null进行转换。Integer类型的null会转化成0.显示出来又会是0.解决这个问题的办法就是设置convertNull为true或者1或者yes或者on还有1都可以。这个可以从源代码中看到。它的作用就是忽略自动null转换。
分享到:
相关推荐
要使用Struts的日期转换器,首先你需要在Action类中定义一个日期类型的属性,并为其添加相应的注解`@DateTimeFormat`,或者在Struts配置文件中定义一个转换器。`@DateTimeFormat`注解允许你指定日期的输入格式,这样...
Struts2转换器是Struts2框架中的一个重要组成部分,它主要负责将用户输入的数据转换为应用程序可以处理的对象。在Web开发中,用户通过表单提交的数据通常以字符串形式到达服务器,而我们的业务逻辑可能需要这些数据...
4. **使用转换器**:一旦转换器注册成功,Struts2将在处理表单提交时自动调用该转换器,将字符串转换为日期对象。 通过这样的自定义转换器,我们可以确保Struts2能正确处理特定格式的日期输入,避免了因格式不匹配...
这时,我们就需要自定义一个Struts转换器来完成这个任务。 自定义Struts转换器的步骤如下: 1. 创建转换器类:继承`org.apache.struts2.util.StrutsTypeConverter`类,并重写其`convertFromString`和`...
`LineConvertor` 是一个自定义的Struts转换器类,继承自`StrutsTypeConverter`。这个类的主要职责是为特定的数据类型提供转换方法,确保从请求参数到模型对象的转换过程符合业务逻辑。 在Struts中,转换器的实现...
在Struts2中,类型转换器(Type Converter)是框架的一个关键特性,用于处理Action类中属性的自动类型转换。这个特性使得开发者无需手动进行数据类型之间的转换,从而提高了开发效率和代码的可读性。 标题中的...
2. **配置转换器**:为了让Struts2知道何时使用自定义的转换器,我们需要在配置文件(通常是struts.xml)中进行声明。可以使用`<conversion-property>`标签来指定转换器应用于哪个字段,或者全局注册转换器。 ```...
本教程主要探讨Struts2.1源代码中的自定义类型转换器。 1. **类型转换器的作用** 类型转换器是Struts2框架的核心组件之一,其主要任务是将用户的输入(通常是字符串)转换为Action类中声明的字段类型。这在处理...
### Struts自定义类型转换器 #### 一、概述 在Web开发中,表单提交的数据通常是字符串形式的,而在业务逻辑处理时往往需要将这些数据转换为其他类型的对象(如日期、数字等)。Struts框架为了更好地处理这种类型...
这篇博客“Struts2数据类型转换器”可能深入探讨了这个主题,虽然具体的细节无法在此给出,但我们可以根据Struts2中数据类型转换的工作原理来展开讨论。 在Java Web开发中,用户通过表单提交的数据通常是字符串形式...
3. **应用转换器**:一旦注册,Struts会在需要的时候自动调用你的转换器,例如,当你在Action类中定义了一个属性,而这个属性的值需要通过转换器处理时。 4. **验证和错误处理**:转换器不仅可以进行数据转换,还...
在Struts2框架中,自定义类型转换器是开发者为了满足特定需求,对框架默认的类型转换机制进行扩展的一种方式。Struts2允许我们创建自己的转换器类来处理输入数据,确保模型对象的属性能够正确地被转换为预期的数据...
自定义类型转换器是Struts 2的核心特性之一,允许开发者根据业务需求定制数据转换规则。以下将详细介绍如何创建、注册以及使用自定义类型转换器。 1. **创建自定义类型转换器** - 创建一个类,实现`org.apache....
Struts2.0属性转换器(Converters)是框架中一个关键组件,它负责将用户输入的数据转换为Java对象的属性类型,确保数据在表单提交后能够正确地绑定到模型对象上。转换器机制的存在使得开发者可以自定义数据类型转换...
这个压缩包“struts2 全局类型转换器.rar”可能包含了一个示例或教程,教你如何在Struts2中实现全局类型转换器,以统一处理不同类型的字段转换。在Struts2中,类型转换器扮演着重要的角色,它允许你将用户输入的数据...
在Struts2中,转换器(Converter)扮演着至关重要的角色,它负责将用户输入的数据转换为模型对象的属性,确保数据类型的一致性和安全性。转换器是Struts2框架中Action类与HTTP请求之间数据绑定的关键组件。 在...
这是一个讲解struts2框架转换器的ppt,在这个ppt中你可以学到strutsDefaultConversion转换器的前世今生,而已免积分哦!,附带有例子。