Struts2之类型转换
jsp提交的数据全部是String类型,Struts2也是通过request.getParameter(name)取得String类型的数据,并通过拦截器将String转换成各种类型的数据,然后通过get、set方法设置到action对应的属性,默认的转换器不能满足需求,需要自定义类型转换。
数据类型转换都需要实现ognl.TypeConverter接口,一般直接继承DefaulrTypeConverter类,并实现convertValue()方法。convertvalue()有3个参数,参数value为待转换的数据,参数toType为要转成的类型,参数context为上下文,参数value为request.getparameter(name)返回的String[]类型的对象,而不是String。类型转换分为两类:局部类型转换器:对某个action转换类型起作用。全局类型转换器:对所有action转换类型起作用.
一、局部类型转换
1.1 普通Action中的类型转换
配置文件存放目录:Action同级目录;
配置文件名:Action名-conversion.properties文件
转换器:自定义转换器实现TypeConverter接口,可以直接继承StrutsTypeConverter来实现;
内容:Action属性名=转换器包路径
1.2 基于模型驱动的类型转换
配置文件存放目录:模型同级目录;
配置文件名:模型名-conversion.properties文件
转换器:自定义转换器实现TypeConverter接口,可以直接继承StrutsTypeConverter来实现;
内容:模型属性名=转换器包路径
二、全局类型转换
配置文件存放目录:项目根目录;
配置文件名:work-conversion.properties文件
转换器:自定义转换器实现TypeConverter接口,可以直接继承StrutsTypeConverter来实现;
内容:要转换的类型包路径=转换器包路径
注意:若在模型驱动情况下,即配置了Action的类型转换器又配置了对应模型的转换器,此时只会选择模型转换器;
三、实现
1.不管是局部还是全局类型转换,转换器都是一样的,只是配置文件不一样,所以先实现转换器,这里还是以MyStruts2为基础。
- package com.test.converter;
- import java.text.DateFormat;
- import java.text.SimpleDateFormat;
- import java.util.Map;
- import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
- import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;
- public class DateTimeConverter 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:ss"),
- new SimpleDateFormat("HH:mm"),
- };
- @Override
- public Object convertValue(Map<String, Object> 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){} catch (java.text.ParseException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- 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){} catch (java.text.ParseException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- 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){} catch (java.text.ParseException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- else if(toType.equals(String.class))
- {
- if(value instanceof java.sql.Date){
- return dateFormat[0].format((java.sql.Date)value);
- }
- else if(value instanceof java.sql.Time)
- {
- return timeFormat[0].format((java.sql.Time)value);
- }
- else if(value instanceof java.util.Date)
- {
- return dateFormat[0].format((java.util.Date)value);
- }
- }
- return super.convertValue(context, value, toType);
- }
- }
2.配置
普通Action中的类型转换:user.birthDay=com.test.converter.DateTimeConverter
基于模型驱动的类型转换:birthDay=com.test.converter.DateTimeConverter
全局类型转换:java.util.Date=com.test.converter.DateTimeConverter
这里还是新增一个User,时间格式是/也是能输出
Struts2之类型转换的更多相关文章
- Struts2自定义类型转换,和处理类型转换错误
Struts2自定义类型转换: 从前台接受到的类型全部是字符串,Struts2自带的一些基本类型转换有时不能满足我们的特别需要,如:日期字符串输入格式,还有一些自定义的类,直接传到后台,我们需要一些自 ...
- Struts2的类型转换
Struts2的类型转换 类型转换的作用: HTTP请求都是字符串类型,需要把这些字符串类型转化成相应的数据类型,使得Web应用的控制组件可以使用. 1.內建的类型转换器 Struts2可以完成大多数 ...
- 关于Struts2的类型转换详解
详细出处参考:http://www.jb51.net/article/35465.htm 一.类型转换的意义 对于一个智能的MVC框架而言,不可避免的需要实现类型转换.因为B/S(浏览器/服务器)结构 ...
- Struts2的类型转换机制
Struts2的类型转换机制 在基于HITP 协胆的Web 应用中,客户端〈浏览器〉和服务器之间传输的都是字符串形式的数据,换句话说,服务器接收到的用户数据只能是字符串或字符数组, 但在服务器端的Ja ...
- java之struts2之类型转换
在使用servlet开发中,表单中提交的数据到servlet后都是字符串类型,需要程序员手动进行类型转换. 但是到struts2后,基本数据类型struts2都可以转换.但是如果是自定义类型,stru ...
- (十二)struts2的类型转换
所有的MVC框架,都属于表现层的解决方案,都需要负责收集用户请求参数,并将请求参数传给应用的控制器组件. 这时问题出现了,所有的请求参数都是字符串类型数据,因此MVC框架必须具备将这些字符串请求参数转 ...
- Struts2日期类型转换
针对日期类java.util.Date进行类型转换,要求客户端使用"yyyy-MM-dd","yyyy/MM/dd"中的任意一种输入,并以"yyyy- ...
- Struts2 日期类型转换
针对日期类java.util.Date进行类型转换,要求客户端使用"yyyy-MM-dd","yyyy/MM/dd"中的任意一种输入,并以"yyyy- ...
- Struts2笔记——类型转换
概述 * 从一个HTML 表单到一个Action 对象, 类型转换是从字符串到非字符串. >HTTP 没有 “类型” 的概念. 每一项表单输入只可能是一个字符串或一个字符串数组. 在服 ...
- Struts2的类型转换(上)
传统的类型转换.(略) Struts2中提供了内置的基本的类型转换器,可以实现基本类型的自动转换,包括: Integer, Float, Double, Decimal Date and Dateti ...
随机推荐
- web集成高德地图
1.使用高德地图API需到官网添加一个Key,http://lbs.amap.com/dev/key/app 2.页面头引入 <div id="addressMap"> ...
- ABP框架系列之三:(Entity Framework Integration-实体框架集成)
ASP.NET Boilerplate can work with any O/RM framework. It has built-in integration with EntityFramewo ...
- python模块:time
# encoding: utf-8 # module time # from (built-in) # by generator 1.145 """ This modul ...
- Windows激活客户端 已停止工作
win+r 进入运行 slmgr /ipx 新的sn slmgr /ato
- 分享Pos函数(比FastPos还要快)
): Integer; ): Integer; 主要用途是搜索字符串中第n个Substr. 经过测试,这2个函数的速度比直接用Pos+Copy快好几倍(如果字符串够长,可能10几倍) 比Pos+Del ...
- Delphi控件cxGrid 如何动态创建列?
方法一: var i: Integer; Column: TcxGridDBColumn; cxView: TcxGridDBTableView; begin cxView := Self.Level ...
- 9.2 翻译系列:数据注解特性之---Column【EF 6 Code First系列】
原文链接:http://www.entityframeworktutorial.net/code-first/column-dataannotations-attribute-in-code-firs ...
- Spring集合注入
1.集合注入 上一篇博客讲了spring得属性注入,通过value属性来配置基本数据类型,通过<property>标签的 ref 属性来配置对象的引用.如果想注入多个数据,那我们就要用到集 ...
- Python selenium + Firefox启动浏览器
Python selenium 的运用 from selenium import webdriver # from selenium.webdriver.firefox.firefox_profile ...
- iOS调用QQ发起临时会话
iOS调用QQ发起临时会话 iOS调用qq前先判断是否安装qq, 之后通过OpenURL打开对用的qq NSURL *url = [NSURL URLWithString:@"mqq://& ...