struts之类型转换
Struts2的内置类型转换器:
Struts2的内置类型转换器,可以为你处理大多数的类型转换,这包括了以下类型和String类型之间的转换!
1.String
将int,double,boolean,String类型的数组或java.util.Date类型转换成字符串。
2:boolean和Boolean
在字符串与boolean之间转换
3:char/Character
在字符串和字符之间转换
4:int/Integer,float/Float,long/Long,double/Double
在字符串与数值类型之间进行转换
5:date
在字符串和日期类型之间进行转换,对于日期类型,采用SHORT格式来进行处理,使用当前请求关联的Locale的格式
6:array
由于数组本身就有类型,Struts2使用元素类型对应类型转换器,将字符串转换为数组元素的类型,然后再设置到新的数组中
7:collection
如果不能确定对象类型,则假定集合元素类型为String,并创建一个新的ArrayList存放所有的字符串。
创建自定义类型转换器
如果struts的内置类型转换器无法满足你的要求,你还可以自定义类型转换器!你需要实现ognlTypeConver接口,但由于该接口中的convertValue()太过复杂,所以你可以选择继承defaultTypeConvert类,
如下所示:
public Object convertValue(Map Context,Object value,Class type)
参数context是表示ognl上下文中Map的对象,value是需要转换的对象,toType是需要转换的目标类型!
例:
public numberConvert extends defaultTypeConvert
{
@Override
public Object convertValue(Map context,Object value,Class type)
{
//将字符串转换为long类型
if(Type==long.class){
String strNum=((String[])value)[0];
StringBuffer sb=new StringBuffer(strNum);
//查找字符串中代表千分位的,
int index=sb.indexOf(",");
//采用循环将字符串中的,一一删除
while(index>-1){
sb.deleteCharAt(index);
index=sb.indexOf(",");
}
return Long.parseLong(sb.toString())
}
else if(toType==String.class)
{
Long num=(Long)num;
StringBuffer sb=new StringBuffer(num.toString());
StringBuffer result=new StringBuffer();
//先将sb对象中的字符反序,以便于插入表示千分位的,
sb=sb.reverse();
String temp=null;
while(sb.lengh()>3)
{
temp=sb.subString(0,3);
result.append(temp);
result.append(",");
sb.delete(0,3);
result.append(sb);
}
return result.reverse().toString();
}
return null;
}
}
1:web程序中的类型转换是双向的,从客户端接收到的数据需要进行类型转换,再将数据输出到客户端时也要进行类型转换!在本例中,客户端输入字符串“45,123,234” 利用我们自定义的类型转换器
可以将它转换成Long类型的45123234,如果要向客户端输入Long型的数据,那么该转换器将再次调用,将45123234转换成“45,123,234”。类型之间的双向转换都是在convertValue()方法中产生的
通过判断参数type类型,可以得知转换的方向。
2:我们将value转换为string数组,为什么value是String数组而不是String呢?Struts2在获取请求参数的时候调用的是HttpServletRequest对象的getParameterMap方法,它返回一个Map对象,
请求参数的名字为key,请求参数的值为value,key的类型是String,而value是String类型的数组,Struts2根据Map中的key将value设置到对象的属性上。如果需要类型转换,则Struts2,将String类型的数组传给convertValue()方法的value参数!
编写类型转换器时,除了可以继承OGNL中的DefaultTypeConvert类外,还可以继承Struts2中给出的org.apache.struts2.util.StrutsTypeConvert抽象类。StrtsTypeConvert抽象类继承自DefalutTypeConvert类,提供两个方法供String与其他类型转换!
public abstract Object convertFromString(Map context,String[] value,Class type);
和
public abstract String convertToString(Map context,Object o);
struts之类型转换的更多相关文章
- Struts的类型转换
struts中jsp提交的数据,struts会自动转换为action中的属性类型: 对于基本的数据类型以及日期类型会自动转换: 就像前面那一篇博客的代码封装一样,会把字符串类型传过来的数据转化为相应的 ...
- Struts中类型转换踩的坑
出现的异常: 当我输入的数据很大时候,转换后如上,这并不是我想要的, 出现问题的原因: Struts2对常用的数据类型如String.Integer.Double等都添加了转换器进行对应的转换操作. ...
- Struts个人总结
编写Struts2第一个程序 Struts2是目前最流行的MVC框架,吸收了传统Struts和WebWork两者的精华,基于Struts2来进行开发可以大大减少开发时间,提高开发效率,并降低后期维护时 ...
- java学习笔记 (2) —— Struts2类型转换、数据验证重要知识点
1.*Action.conversion-properties 如(point=com.test.Converter.PointListConverter) 具体操作类的配置文件 2.*Action. ...
- struts2框架之类型转换(参考第二天学习笔记)
类型转换 1. 什么是类型转换 刚才学习了封装请求参数,把表单数据封装到Action(模型)的属性中.表单中的数据都是String类型,但Action(模型)的属性不一定什么类型. 将来我们还需要数据 ...
- struts2随笔
1.struts.properties配置常量等同于struts.xml中配置(置于类加载路径下面)struts.multipart.maxSize文件上传最大大小struts.action.exte ...
- Struts1使用技巧
转自:https://blog.csdn.net/chjttony/article/details/6099101 1.Struts1是Apache推出的java web开发领域一个比较早,同时也是使 ...
- struts2学习之基础笔记3
第8章Struts 2类型转换 使用类型转换器 自定义类型转换器 步骤:1. Struts 2 构建流程 2.自定义类型转换器类(继承 DefaultTypeConverter /StrutsType ...
- struts基于ognl的自动类型转换需要注意的地方
好吧,坎坷的过程我就不说了,直接上结论: 在struts2中使用基于ognl的自动类型转换时,Action中的对象属性必须同时添加get/set方法. 例如: 客户端表单: <s:form ac ...
随机推荐
- Dom4j操作XML文件
1. 创建并写入XML public static void writeXML(String filename){ try { Document document = DocumentHelper.c ...
- 【夯实PHP基础】PHP 面向对象
1. 对象中的属性或者函数是 private 或者是 protect的时候,当实例化这个对象的时候,外部是不能访问到这个属性和函数的. <?php class TestClass { //pri ...
- Xdebug文档(七) 远程调试
Xdebug提示调试客户端接口与PHP运行相联系.该章节解释如何设置PHP与xdebug,并推荐一些客户端. 介绍 Xdebug的远程调试器允许你检查数据结构,交互式地穿过和调试你的代码.该协议已经开 ...
- zookeeper集群
0,Zookeeper基本原理 ZooKeeper集群由一组Server节点组成,这一组Server节点中存在一个角色为Leader的节点,其他节点都为Follower.当客户端Client连接到Zo ...
- cocos2d-x3.3 以前版本 工程Xcode6编译时的问题
Undefined symbols for architecture i386: "_fwrite$UNIX2003", referenced from: _unixErrorHa ...
- 2015元旦来个炫的html5特效
效果网址:http://keleyi.com/keleyi/phtml/html5/5.htm 代码: <!DOCTYPE html> <html xmlns="http: ...
- iOS 二维码扫描
// 导入 AVFoundation.framwork 框架#import "HDCodeViewController.h" #import "HDNormalViewC ...
- LruCache缓存
LruCache通常用于实现内存缓存,采用的缓存算法是LRU(Least Recently Used)即近期最少使用算法,其核心思想是:当缓存满的时候,会优先淘汰那些近期最少使用的缓存对象. 1.Lr ...
- 【代码笔记】iOS-水波效果
一,效果图. 二,工程图. 三,代码. ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UIVie ...
- HTML5-03 页面布局
概述 HTML 文档中的元素是一个接着一个排列的,只是简单地在在块级元素的前后加上拆行,是一种流水布局.但是,我们所见到的 Web 页面按照一定的规则布局排版的(通常是多列的),所以就要借助一定的方法 ...