Struts2类型转换
来源:互联网 发布:ftp服务器软件下载 编辑:程序博客网 时间:2024/05/15 05:09
博主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;
- }
- }
- }
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()+"]";
- }
- }
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}"参数转换失败.
- <constant name="struts.custom.i18n.resources" value="Mess"></constant>
为某个action的字段提供错误信息提示
定义Actionname.properties文件,添加配置——Invalid.fieldvalue.属性名=提示信息
下篇文章学习Struts2的文件上传功能
- 【Struts2】:Struts2的类型转换
- struts2类型转换
- struts2类型转换续
- Struts2的类型转换
- struts2 类型转换流程
- Struts2中的类型转换
- [struts2]类型转换笔记
- struts2的类型转换
- Struts2之类型转换
- struts2的类型转换
- struts2 类型转换
- struts2 类型转换
- Struts2类型转换
- struts2日期类型转换
- struts2类型转换
- Struts2类型转换
- Struts2的类型转换
- Struts2日期类型转换
- bzoj3196: Tyvj 1730 二逼平衡树
- 2017年12月7日训练总结
- 写在冬日——一个女程序员第十三年的工作总结
- 安卓如何生成代码混淆的release版本的aar文件并使用
- Linux下的脚本介绍
- Struts2类型转换
- 4412移植SSH到开发板,ubuntu下tftp的搭建
- leetcode-90. Subsets II
- Python学习笔记
- 均值-中位数-众数-极差-中程数-方差-标准差-变异系数
- JAVA微信扫码支付模式二功能实现以及回调
- Shader山下(二十六)Forward渲染路径中的灯光信息
- es6数组扩展笔记
- Spark RDD、DataFrame和DataSet的区别