`

struts2数据类型转换器

阅读更多
数据类型转换器
一为什么要使用转换器
首先struts2通过request.getParameter("");获取String数据,并通过拦截器将

String转换为各种常用的数据类型。但这些Struts2默认的转换器并不总是满足

需求。

二我们自己编写的类型拦截器

package com.MyStruts2Test.convertor;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Map;
import ognl.DefaultTypeConverter;
public class DateTimeConvertor extends DefaultTypeConverter{
	private DateFormat [] dateFormat = {
			new SimpleDateFormat("yyyy-MM-dd"),
			new SimpleDateFormat("yyyy/MM/dd"),
			new SimpleDateFormat("yy-MM-dd")
	};
	private DateFormat [] timeFormat = {
			new SimpleDateFormat("HH:mm:ssss"),
			new SimpleDateFormat("HH:mm")
	};
	public Object convertValue(Map context,Object value,Class 

toType){
		if(toType.equals(java.sql.Date.class)){
			String [] parameterValues = (String [])value;
			for(DateFormat format:dateFormat){
				try{
					return new java.sql.Date

(format.parse(parameterValues[0]).getTime());
				}catch(ParseException e){
					
				}
			}
		}else if(toType.equals(java.sql.Time.class)){
			String [] parameterValues = (String [])value;
			for(DateFormat format:timeFormat){
				try{
					return new java.sql.Time

(format.parse(parameterValues[0]).getTime());
				}catch(ParseException e){
					
				}
			}
		}else if(toType.equals(java.util.Date.class)){
			String [] parameterValues = (String [])value;
			for(DateFormat format:dateFormat){
				try{
					return format.parse

(parameterValues[0]);
				}catch(ParseException e){
					
				}
			}
		}else if(toType.equals(String.class)){
			if (value instanceof java.sql.Date){
				
			}else if(value instanceof java.sql.Time){
				
			}else if(value instanceof java.util.Date){
				return dateFormat[0].format

((java.util.Date)value);
			}
		}
		return super.convertValue(context, value, toType);
	}
}

convertValue(Map context, Object value, Class toType)

的说明详见

http://www.opensymphony.com/ognl/api/ognl/DefaultTypeConverter.html
三编写相应拦截器之后,我们必须配置转换器
java.sql.Date=com.MyStruts2Test.convertor.DateTimeConvertor
java.sql.Time=com.MyStruts2Test.convertor.DateTimeConvertor
java.util.Date=com.MyStruts2Test.convertor.DateTimeConvertor
以及Action
package com.MyStruts2Test.action;



import java.sql.Date;
import java.sql.Time;

import com.opensymphony.xwork2.ActionSupport;
public class ConverterAction extends ActionSupport{
	private Date sqlDate;
	private Time sqlTime;
	private java.util.Date utilDate;
	public String execute(){
		return INPUT;
	}
	public String convert(){
		return SUCCESS;
	}
	public Date getSqlDate() {
		return sqlDate;
	}
	public void setSqlDate(Date sqlDate) {
		this.sqlDate = sqlDate;
	}
	public Time getSqlTime() {
		return sqlTime;
	}
	public void setSqlTime(Time sqlTime) {
		this.sqlTime = sqlTime;
	}
	public java.util.Date getUtilDate() {
		return utilDate;
	}
	public void setUtilDate(java.util.Date utilDate) {
		this.utilDate = utilDate;
	}
	
}
1这里的意思就是如果我们要转换到java.sql.Date类型,我们就要使用类

DateTimeConvertor去进行转换。我们在Action中不需要进行任何的处理,我们

只需要声明相应的类型,转换器会自动进行调用。
2.java.util.Date java.sql.Date区别
http://www.cnblogs.com/lvjianjun/archive/2010/08/24/1807501.html
四编写配置文件和其他页面
1
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts 

Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<package name = "converter" extends = "struts-default" 

namespace = "/converter">
		<action name = "converter" class = 

"com.MyStruts2Test.action.ConverterAction">
			<result name = "input">converter.jsp</result>
			<result name=  "success">success.jsp</result>
		</action>
	</package>
</struts>    

2
<body>
    This is my JSP page. <br>
    <s:form action = "converter">
    	<s:label label = "转换器"/><br>
    	<s:textfield name = "sqlDate" label = "SQL Date:"/><br>
    	<s:textfield name = "sqlTime" label = "SQL Time:"/><br>
    	<s:textfield name = "utilDate" label = "Util Date:"/><br>
    	<s:submit value = "提交" method = "convert"/>
    </s:form>
  </body>
注意这里的<s:submit value = "提交" method = "convert"/>,它会调用相应

的action类的方法,而不是通过动态方法或其他方法调用.
3
<body>
    This is my JSP page. <br>
    java.sql.Date:<s:property value = "sqlDate"/><br>
    java.sql.Time:<s:property value = "sqlTime"/><br>
    java.util.Date:<s:property value = "utilDate"/><br>
  </body>

4
<body>
    This is my JSP page. <br>
    <a href = "<s:url action = "converter" namespace = 

"/converter"/>">ConverterTest</a>
  </body>

5
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <filter>
  	<filter-name>struts2</filter-name>
  	<filter-class>
  		

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  	</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping></web-app>
特别要注意一个以前没发现的问题,如果我们这里的urlpattern不使用/*,而使

用*.action,也就是针对所有后缀为.action的页面执行过滤,但是如果我们在

其他非action后缀的页面中使用struts标签的话就会发生问题,这是由于struts

标签需要struts的过滤器进行处理。
有关类型转换器的知识可见

http://blog.csdn.net/q3498233/article/details/7074095或者

http://blog.163.com/zhangfei_jiayou/blog/static/56244178200982622041863/
分享到:
评论

相关推荐

    struts2自定义类型转换器

    使用struts2提供的转化器,实现Date类型的数据转换

    struts2中的类型转换器

    对于基本数据类型 strus2可以自动的将其转换成所需要的类型,但是我们自己定义的引用数据类型无法转换,本文详细介绍了strus2的自定义类型转换器

    自己写的struts2类型转换器

    服务器可以接收到的来自用户的数据只能是字符串或者是字符串数组,而在服务器上的对象中 ,这些数据往往有多种不同的类型,如日期(Date) 整数(int) 浮点数... 要实现 上述的转换 ,Struts2中 提供了 converter。

    一篇文章搞定Struts2的类型转换

    主要介绍了关于Struts2类型转换的相关资料,文中主要介绍了Struts2的类型转换器和自定义类型转换器的实现,有需要的朋友可以参考借鉴,下面来一起看看吧。

    Struts批量类型转换

    软件硕士张龙老师,对Struts2类型转换器的说明源代码,以及批量插入数据的源代码,不改动任何代码的情况下进行类型转换。

    自己写的转换器,包含各种基本的数据类型。

    struts1框架中没有自动转换器,每次都得自己部署,所以自己写个,源码分享给大家。

    Struts2详解,Struts2与Struts1的区别

    新手必备,看完绝对思路清晰。醍醐灌顶啊! 一. Struts2介绍 1.... 数据类型转换器 11. 实现文件上传 12. Struts2的拦截器 13. 拒绝表单重复提交 四. OGNL表达式 五. Struts2中常用标签

    Struts2全解Struts2全解

    1、struts2概述 Struts2 软件下载 Struts2 比较重要的类 操作步骤及框架配置 struts运行机制 2、简单的struts2程序 ...9 struts2类型转换 ........ 10struts2标签库 ........ 11、访问数据库 ........

    Struts2 in action中文版

    5.3.1 立即可用的类型转换器 89 5.3.2 使用OGNL表达式从表单字段名映射到属性 90 5.4 自定义类型转换 101 5.4.1 实现类型转换器 102 5.4.2 在String和Circle之间转换 102 5.4.3 配置框架使用自定义转换器 103 5.5 小...

    struts2总结大全

    servlet模板,JavaDoc视图的使用,局部类型转换器步骤 ,全局类型转换器 ---对所有的Action类有效,模型驱动,数据校验,struts2校验介绍,校验分类,包的总结,开发的核心类库

    struts2讲义_吴峻申

    7.1.2 List集合类型数据类型转换功能 138 7.1.3 Set集合类型数据类型转换功能 141 7.2 类型转换发生异常处理方案 144 7.2.1 Struts2自带异常提示 145 7.2.2 Struts2局部异常提示定义属性文件使用介绍 146 7.2.3 ...

    Struts2入门教程(全新完整版)

    十、类型转换 57 1.基于Action的直接属性转换 57 2.基于Action的间接属性vo转换 59 十一、注解配置 59 十二、总结 本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及...

    深入浅出Struts2(附源码)

    作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,如数据类型转换、文件上传和下载、提高Struts 2应用的安全性、调试与性能分析、FreeMarker、Velocity、Ajax,等等。跟随作者一道深入Struts 2,聆听...

    struts2课程笔记

    struts2知识点:处理流程,基本配置,与servlet的API解耦,结果类型,通配符和动态方法的调用,类型转换,文件上传,拦截器,表单验证,国际化,OGNL表达式,UI标签,模型驱动,防止表单重复提交,项目练习知识点:...

    struts2教程ppt

    struts2教程,一共有八个ppt。内容丰富。有:1、struts2配置与运行。2、类型转换器。3、 数据较验。4、拦截器。5、文件上传与下载。6、struts2国际化。7、 标签介绍。8、Struts2的插件。

    Struts2 学习笔记

    01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 七、 Action的动态调用方法 8 ...10 类型转换 38 Struts2总结 39

    struts2框架核心笔记整力

    struts2框架经典整理,异常处理的方式和配置,全局资源文件执行国际化的方法,数据校验,数据类型转换器,基础讲解。

Global site tag (gtag.js) - Google Analytics