问题描述:在定义日期类型birthday属性时,如果前台传给后台的日期形式是2012-11-12形式,在前台就会以Mon Nov 12 00:00:00 CST 2012 形式将日期显示出来,并且不会报错,但是如果传给后台的是20121112形式的话,后天就会报找不到setBirthday(String )的错误,原因是在20121112在传到后台被当成了String类型的,所以找不到方法,那么要想解决该问题,就要进行类型转换。
public class Test {
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String add() {
return "success";
}
}
struts.xml
<package name="neu" namespace="/neu" extends="base">
<action name="test_*" class="cn.itcast.action.Test" method="{1}">
<result> /WEB-INF/page/test.jsp</result>
</action>
</package>
加入类型转换类:
package cn.itcast.type.converter;
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Map;
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
public class DateTypeConverter extends DefaultTypeConverter {
// 该方法可以实现双向转换
@SuppressWarnings("rawtypes")
public Object convertValue(Map<String ,Object> context, Object value, Class toType) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
try {
if (toType == Date.class) {// 当字符串向Date类型转换时
String[] params = (String[]) value;
return sdf.parse(params[0]);
} else if(toType == String.class) { //当Date转换成字符串时
Date date = (Date)value;
return sdf.format(date);
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
局部类型转换器:
建立注册文件:命名规则:Action名-conversion.propertier,那么本例为Test-conversion.propertier,该文件要放在同Action同一包下(此为局部类型转换)。
在Test-conversion.propertier文件中将需要类型转换的属性写上,并等于类型转换的类全名(包括包名)birthday=cn.itcast.type.converter.DateTypeConverter
全局类型转换器:
建立注册文件:命名规则:xwork-conversion.propertier,在WEB-INF/classes下放置或者直接放在src根目录下。
文件中的内容:待转换类型=类型转换器全类名 java.util.Date=cn.itcast.type.converter.DateTypeConverter
下面总结一下类型转换的步骤:
1、定义类型转换器,继承DefaultTypeConverter ,重新convertValue方法
2、对类型转换器注册,建立配置文件(注意放置位置),遵守命名规则(局部与全局不同),在文件中 key=类型转换器类
分享到:
相关推荐
### Struts2自定义类型转换:深入解析与实践 #### 引言 在Web开发中,数据类型转换是一项常见的需求,特别是在用户输入的数据与后端处理的数据类型不一致时。Struts2框架提供了强大的类型转换机制,允许开发者...
然而,对于如Date这样的复杂类型,需要自定义转换器来处理。 创建自定义类型转换器的步骤如下: 1. **定义转换器类**:继承`org.apache.struts2.util.FieldConverter`或`...
本实例练习旨在帮助你深入理解Struts2的工作原理,特别是自定义类型转换和拦截器的使用。 首先,让我们详细探讨Struts2的MVC架构。在MVC模式中,Model代表业务逻辑,View负责展示数据,而Controller则是两者之间的...
### Struts自定义类型转换器 #### 一、概述 在Web开发中,表单提交的数据通常是字符串形式的,而在业务逻辑处理时往往需要将这些数据转换为其他类型的对象(如日期、数字等)。Struts框架为了更好地处理这种类型...
自定义类型转换器是Struts 2的核心特性之一,允许开发者根据业务需求定制数据转换规则。以下将详细介绍如何创建、注册以及使用自定义类型转换器。 1. **创建自定义类型转换器** - 创建一个类,实现`org.apache....
Struts2作为一款流行的Java Web框架,其在处理用户输入数据时扮演着重要角色。...在练习中,你可以尝试创建不同的自定义转换器,并理解它们在处理不同类型数据时的作用,从而加深对Struts2数据处理机制的理解。
通常,Struts2框架内置了一些基本类型的转换器,但有时我们需要对特定的数据类型进行自定义转换,这时就需要编写自定义的转换类。下面将详细讲解如何在Struts2中实现自定义转换类。 首先,了解Struts2的转换机制。...
熟悉和掌握Struts2自定义类型转换。 熟悉和掌握Struts2内建校验的操作方法 实验环境与设备: 已经接入局域网的网络实验室,机器上装有IE浏览器等; strtus2.5.8 实验内容: (1) 编写一个...
接着,当Struts2接收到相关参数时,会自动调用自定义转换器进行转换。 6. **调试与测试** 调试自定义类型转换器通常涉及到设置断点,观察转换过程中的变量状态,以及通过单元测试确保转换逻辑的正确性。在IDE如...
Struts2是一个强大的MVC框架,它在处理用户请求时涉及到数据类型的转换,这在处理复杂的表单数据或者自定义对象时尤其重要。本篇文章将详细介绍如何在Struts2中进行配置与自定义类型转换。 首先,Struts2的配置主要...
理解并掌握如何利用内置转换器、自定义转换器以及处理转换错误,对于构建高效、稳定的Struts2应用至关重要。通过深入学习Struts2的源码和使用相关工具,我们可以更深入地了解这些机制,并优化我们的应用程序。
自定义类型转换器是当Struts2内置的转换器无法满足特定业务需求时,开发者自行创建的一种扩展方式。然而,这里提到的"自定义类型转换器"实际上与权限控制有关,而非类型转换。描述中的内容主要涉及的是如何实现用户...
2. 在struts.xml配置文件中定义`<global-converters>`或`<package>`级别的`<converters>`元素,添加自定义转换器。 此外,Struts2还提供了`ConversionError`接口,用于处理转换失败的情况。当转换失败时,我们可以...
在struts.xml文件中,使用`<conversion>`标签声明转换器,指定对应的转换类型。 除了全局注册,我们还可以针对特定Action或特定字段注册转换器。比如,如果只想在某个Action的某个字段上应用自定义转换器,可以在...
标签中的“源码”可能意味着博客会深入到Struts2框架的源代码中,解释类型转换器的工作原理和如何根据源代码实现自定义转换器。而“工具”可能指的是使用Struts2提供的工具类或API来辅助类型转换。 在`Struts2_3500...
Struts2是一个流行的Java web开发...总之,Struts2的类型转换机制为开发者提供了强大的灵活性和便利性,不仅可以处理基本类型,还能方便地扩展以支持自定义类型和复杂数据结构的转换,从而简化了Web应用的开发工作。
自定义转换器使得Struts框架更加灵活,能够处理复杂或特殊的数据类型,提高了代码的可维护性和用户体验。通过编写自定义转换器,开发者可以确保数据转换过程符合业务规则,减少因类型不匹配导致的错误。在实际开发中...
#### 一、Struts2的类型转换类型 在Struts2框架中,类型转换是处理用户输入数据时的一个关键环节。Struts2支持多种内置的数据类型转换,同时也允许开发人员自定义类型转换规则。 **1.1 内置类型转换** Struts2提供...