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 ...
随机推荐
- 【Java每日一题】20161219
package Dec2016; import java.util.Arrays; public class Ques1219 { public static void main(String[] a ...
- 转载:《TypeScript 中文入门教程》 14、输入.d.ts文件
版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 介绍 当使用外部JavaScript库或新的宿主API时,你需要一个声明文件(.d.t ...
- 如何在MFC界面开发中响应Button按钮的Down和Up事件
通过尝试有两种方案可以解决这个问题,第一种方案是通过PreTranslateMessage函数在调度消息之前对消息类型进行筛选,第二种方案是重载CButton类,在重载后的类CForTestButto ...
- Lind.DDD.Utils.HttpHelper里静态对象引出的Http超时问题
回到目录 Lind.DDD.Utils.HttpHelper组件主要实现了对HTTP的各种操作,如Get,Post,Put和Delete,它属于最纯粹的操作,大叔把它封装的目的主要为了实现与API安全 ...
- PHP中的特殊类,接口类和抽象类(都不能直接实例化)
接口类不用实例化,需要一一实现接口定义的所有方法.关键字interface implements 接口interface 是一个规定,给人继承用的东西,有点像抽象类在里面定义的方法,却不去实例化,而需 ...
- [JS]笔记15之客户端存储cookie
-->本地存储发展情况 -->什么是cookie -->cookie优缺点 -->cookie的设置.读取.删除 -->cookie应用 本地存储发展情况 一.什么是co ...
- CSS3中的弹性布局——"em"的用法
使用CSS也好久了,但一直都是在使用“px”来设置Web元素的相关属性,未敢使用“em”.主要原因是,对其并不什么了解,只知道一点概念性的东西,前段时间在项目中要求使用“em”作为单位设置元素,所以从 ...
- UITextFieldDelegate协议
很多人都认为UITextField很简单,为什么会写这个协议呢? 因为在实际开发中可能会用到: 比如要做到下图的效果: 文本框下面的下划线的颜色要随着输入的状态变化: 点击对应的文本框,其下面的线条变 ...
- sharepoint 相关<httpHandlers>
<add verb="GET,POST,HEAD,(GETSOURCE),(HEADSOURCE),(POSTSOURCE)" path="*.doc,*.docx ...
- IOS开发基础知识--碎片22
1:设置有间距的表格行(UITableViewStyleGrouped) .设置section的数目,即是你有多少个cell - (NSInteger)numberOfSectionsInTableV ...