SSH学习(四)Struts2类型转换
来源:互联网 发布:豆沙色唇膏 知乎 编辑:程序博客网 时间:2024/05/16 10:42
原文来自搬砖工,如需转载请注明出处
博主SSH框架专栏请戳这里http://blog.csdn.net/column/details/14227.html
一、类型转换的意义
所以的MVC框架,解决的都是表现层的解决方案,都需要收集用户请求参数,并把参数提供给控制器。但是,在Web应用中所有的请求参数都是字符串类型的,Java是强类型的语言,如何将字符串转换为Java类型,这是框架要解决的一个问题。
例如,一个注册页需要输入年龄、日期等。这时候就需要将日期、年龄字符串转换为相应类型。
二、Struts2的类型转换器
Struts2提供了内置的类型转换器,对于大部分类型,开发者无需自定义类型转换器,使用内置的类型转换器就可以完成我们需要的类型转换。
内置类型转换器有:
1.boolean和Boolean
2.char和Character
3.int和Integer
4.long和Long
5.float和Float
6.double和Double
7.date
比如我们在页面输入20,传输到后台肯定是字符串类型。但是Struts框架的内置类型转换可以把20转换为int型。但是如果我们转换abc这样的为int是行不通的。
三、自定义类型转换器的实现
1.需求分析
比如我们需要在页面上输入(2,3)这样一个坐标点,将该点转换为一个点对象类型。
2.实现
当内置类型转换无法满足我们的需求的时候,需要用到自定义类型转换。Struts2的类型转换时基于ONGL的,在ONGL中有一个接口TypeConverter,该接口中有一个方法converterValue,该方法很复杂。其中还有一个默认的实现类DefaultTypeConverter,通过该类来实现类型转换。
package com.study.converter;import java.util.Map;import com.study.bean.Point;import ognl.DefaultTypeConverter;public class PointConverter extends DefaultTypeConverter{public Object convertValue(Map context, Object value, Class toType) {if(toType==Point.class){String []strs = (String[])value;String []xy = strs[0].split(",");int x = Integer.valueOf(xy[0]);int y = Integer.valueOf(xy[1]);Point p = new Point();p.setX(x);p.setY(y);return p;}else if(toType==String.class){Point p = (Point) value;return "["+p.getX()+","+p.getY()+"]";}else{return null;}}}这就是转换器的一个简单实现,把页面传输的值进行解析,最后转换为Point类型。然后要让类型转换器起作用,需要进行配置
struts2提供了两种配置方法:
a.局部:首先创建文件命名如Actionname-conversion.properties,里面的内容为 属性=类型转换器(ponit=com.study.converter)需要写在包下面
b.全局:首先创建文件命名如xwork-conversion.properties,内容为com.study.bean.Ponit=com.study.converter。文件需要写在src下面
3.Struts的实现
struts2中有一个StrutsTypeConverter类,它是继承DefaultTypeConverter。使用它来自定义转换器更加方便,示例代码如下:
package com.study.converter;import java.util.Map;import org.apache.struts2.util.StrutsTypeConverter;import com.study.bean.Point;public class PointConverter extends StrutsTypeConverter{public Object convertFromString(Map map, String[] obj, Class toType) {String []strs = obj;String []xy = strs[0].split(",");int x = Integer.valueOf(xy[0]);int y = Integer.valueOf(xy[1]);Point p = new Point();p.setX(x);p.setY(y);return p;}public String convertToString(Map map, Object obj) {Point p = (Point) obj;return "["+p.getX()+","+p.getY()+"]";}}4.类型转换器的错误处理
Struts2提供了一个名为conversionError的拦截器,如果类型转换出现错误,拦截器负责将错误封装成表单错误(filederror),并将错误信息放入ActionContext中。
如何那么改变默认类型转换错误的错误提示信息?
方法一:
首先创建一个资源文件Mess.properties,放在src下面
然后覆盖xwork-core-2.3.31\com\opensymphony\xwork2\xwork-messages.properties里面的属性xwork.default.invalid.fieldvalue。即在Mess.properties中写入如下参数
xwork.default.invalid.fieldvalue="{0}"参数转换失败.然后指定我们的资源文件,在struts.xml中(不需要加文件后缀)
<constant name="struts.custom.i18n.resources" value="Mess"></constant>方法二:
为某个action的字段提供错误信息提示
定义Actionname.properties文件,添加配置——Invalid.fieldvalue.属性名=提示信息
下篇文章学习Struts2的文件上传功能
- SSH学习(四)Struts2类型转换
- 【SSH】Struts2学习(四)拦截器、struts2标签
- 黑马程序员——struts2学习笔记四(类型转换)
- struts2学习(一)类型转换--DefaultTypeConverter
- Struts2学习——(十二)Struts2类型转换
- 【Struts2】Struts2学习(5)类型转换和输入校验
- Struts2学习:类型转换篇
- struts2入门学习--类型转换
- Struts2学习之类型转换
- 类型转换---struts2学习笔记
- Struts2类型转换学习笔记
- Struts2学习笔记-类型转换
- struts2学习之---类型转换
- (四)、类型转换
- struts2类型转换(局部类型转换)
- struts2学习笔记(二)——类型转换
- struts2学习(二)--转换器StrutsTypeConverter和全局类型转换
- 尚硅谷学习笔记--Struts2 类型转换(1)
- windows和linux下使用python2.7 urllib.urlopen+beautifulsoup打开12306网站订票页面表现不同,前者报错ssl认证失败,后者成功
- bfs+预处理+路径回溯+字典序最小+hash
- java线程同步之Lock锁
- socket编程中write、read和send、recv之间的区别
- Android 手机微服务架构的简单实现
- SSH学习(四)Struts2类型转换
- SynchronousQueue、LinkedBlockingQueue、ArrayBlockingQueue性能测试
- Shift and 算法 模板记录
- Android 使用Python实现多渠道打包实践
- 58
- Windows Server 2012 端口问题
- 跟我来学shiro,第一课
- HDU2159: FATE(二维完全背包)
- import 载入模块(类似java导包)