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 ...
随机推荐
- thinkphp验证码
thinkphp自带验证码 前端页面: <div style="position:absolute;z-index:3;top:160px;left:180px;"> ...
- CORS(跨源资源共享)实战
声明:本文中的cors为createCORSRequest返回的对象 1. 同一跨域接口 function createCORSRequest(method, url) { var xhr = new ...
- 初识Java
Java是一种简单的.面向对象的.分布式的.解释的.安全的.可移植的.性能优异的多线程语言.它以极强的安全性.平台无关性.硬件结构无关性.语言简洁.面向对象的特点,在网络编程语言中占据了无可比拟的优势 ...
- 从零开始学 Java - CentOS 下安装 Tomcat
生活以痛吻我,我仍报之以歌 昨天晚上看到那个冯大辉老师的微信公众号,「小道消息」上的一篇文章,<生活以痛吻我,我仍报之以歌>.知乎一篇匿名回答,主题为<冯大辉到底是不是技术大牛,一个 ...
- entityframework学习笔记--005-给code first一个正确的解释
在微软官方关于ef7的介绍中强调,ef7将舍弃database first.model first,只保留code first的使用.这引起了很多人的担忧,担忧源自对code first的错误理解.因 ...
- struts的声明式异常处理
情景 使用Struts封装的下载文件的功能 当下载文件找不到的时候,struts获取的InputStream为null 这个时候,就会报500错误 java.lang.IllegalArgumentE ...
- ajax分页与组合查询配合使用
使用纯HTML页与js.ajax.Linq实现分页与组合查询的配合使用 <body> <div id="top"><input type=" ...
- 美女jquery图片播放器插件
相册在线查看http://keleyi.com/keleyi/phtml/image/6.htm 可全屏,可拖动,可自动播放的jquery图片展示插件 使用说明:1.引用css文件:<link ...
- [deviceone开发]-日程日历示例
一.简介 用户Wang利用Gridview和其它组件绘制的日历和任务,基本实现一个完整的在线日程管理功能.另外还封装了很多js对象,非常值得参考学习.二.效果图 三.相关下载 https://gith ...
- iOS之App加急审核详细步骤
申请加急网址:https://developer.apple.com/appstore/contact/appreviewteam/index.html 补充:加急审核说明是可以写中文的 提交加急审核 ...