【SSH三大框架】Struts2基础第四篇:struts2自定义类型转换器
2014-08-28 22:12
113 查看
一、类型转换器定义:
众所周知,java有八大基本的类型,struts2能对这八大基本类型以及String、Date等常用类型提供自动转换。但是,仅仅这些远远不能满足我们的需要。
原因:因为页面中的类型都是属于字符串类型的,而java是一种强类型语言,这时候我们需要把输入的字符串转型成为相应的类型。
在类型转换器的定义中也分为两种:
局部类型转换器:对某个action转换类型起作用。
全局类型转换器:对所有action转换类型起作用。
二、局部类型转换器:
这里用一个日期来举例子:比如我们在页面输入20140828,如果Action类的属性是Date类型的,则它不能够正确接收到这个时间值。
如果我们输入2014-08-28,则Action类的Date类型的属性就可以正确接收到这个时间值。
所以,这个时候我们就需要用到类型转换了。
首先我们需要定义一个简单的Action类继承ActionSupport类:
package cn.action; import java.util.Date; import com.opensymphony.xwork2.ActionSupport; public class HelloWorldAction extends ActionSupport{ private Date birthday; public Date getBirthday() { System.out.println("get:"+birthday); return birthday; } public void setBirthday(Date birthday) { System.out.println("set:"+birthday); this.birthday = birthday; } public String excute(){ return SUCCESS; } }
然后,我们需要去通过实现TypeCoverter接口或者继承DefaultTypeConverter实现类(该类实现了TypeCoverter接口)来实现自己的类型转换器(重写convertValue方法即可)。
package cn.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 { @Override public Object convertValue(Map arg0, Object value,Class toType) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); try { if (toType == Date.class) {// 当字符串向Date类型转换时 String[] params = (String[]) value;// Request.getParameterValues() System.out.println("value="+value); System.out.println("时间:"+dateFormat.parse(params[0])); return dateFormat.parse(params[0]); } else if (toType == String.class) {// 当Date转换成字符串时 System.out.println(value); Date date = (Date) value; return dateFormat.format(date); } } catch (java.text.ParseException e) { e.printStackTrace(); } return null; } }
最后,我们需要把这个类型转换器注册到WEB应用上边:
在需要生效的Action类的包下新建ActionName-conversion.properties该文件,其中 ActionName是需要转换生效的Action的类名,后面的-conversion固定。
内容: 待转换的action中的属性名=类型转换器的全类名。 注意:类型转换器是需要加包名,而且最后不能加标点符号
如:date=com.DateTypeConvert
我们这里需要建立的是:HelloWorldAction-conversion.properties
birthday=cn.type.Converter.DateTypeConverter
这是项目的工程目录:
请忽视LoginAction.java这个文件,这个文件不是本次实验中的。
三、全局类型转换器:
局部类型转换器仅仅对指定的Action的指定属性进行转换。
全局类型转换器对所有Action的特定类型进行转换。
在src目录下新建xwork-conversion.properties,该文件的内容是待转换的类=转换器的名字,即com.shengsiyuan.bean.User=com.shengsiyuan.converter.UserConverter2
相关文章推荐
- 【SSH三大框架】Struts2基础第八篇:Struts2用AJAX实现JSON插件的使用
- 【SSH三大框架】Struts2基础第七篇:log4j打印出日志信息
- 【SSH三大框架】Struts2基础第一篇:编写第一个Struts2程序
- 【SSH三大框架】Struts2基础第五篇:文件上传
- 【SSH三大框架】Struts2基础第六篇:自定义拦截器功能
- 【SSH三大框架】Hibernate基础第四篇:Hibernate的两种查询方式:hql和Criteria
- 【SSH三大框架】Struts2基础第三篇:配置Action以及调用Action的三种方式
- 【SSH三大框架】Struts2基础第二篇:Struts2的Action访问ServletAPI
- 【SSH三大框架】Hibernate基础第二篇:编写HibernateUtil工具类优化性能
- 【SSH三大框架】Hibernate基础第六篇:多对一关联关系的映射、分析及加入、查询
- 【SSH三大框架】Hibernate基础第十二篇:load()懒加载分析以及一对一、一对多、多对一、多对多懒加载的分析
- SSH三大框架整合的流程是怎样走的,spring在三大框架中式怎么的一个流程,hibernate是怎么的一个流程,struts2是怎么的一个流程的,
- 【SSH三大框架】Hibernate基础第一篇:编写第一个Hibernate程序
- Spring,Struts2,Hibernate三大框架的集成(SSH)
- 【SSH三大框架】Hibernate基础第八篇:多对多关联关系的操作
- 【SSH三大框架】Hibernate基础第十三篇:lazy、constrained、fetch三个属性的作用和使用方法
- 【SSH三大框架】Hibernate基础第十篇:inverse属性详解
- 【SSH三大框架】Hibernate基础第二篇:编写HibernateUtil工具类优化性能
- 【SSH三大框架】Hibernate基础第七篇:一对多关联关系的操作
- 【SSH三大框架】Hibernate基础第六篇:多对一关联关系的映射、分析及添加、查询