Struts2中的类型转换(转载及修改)
2012-01-30 23:04
260 查看
1. Struts2中的类型转换
我们知道通过HTTP提交到后台的数据,都是字符串的形式,而我们需要的数据类型当然不只字符串类型一种。所以,我们需要类型转换!在Struts2中,类型转换的概念除了用于将界面传递过来的字符串转换为特定的类型(convertFromString)之外,还可以用于将特定的类型转换为字符串(即当我们在JSP中要把某种类型的对象呈现的时候,要将它转换为字符串来显示)(converterToString)。
在Struts2中,支持全局类型转换和局部类型转换两种方式。所谓全局类型转换,即在所有的action/model中,都用同一个类型转换器来转换某种特定类型的对象;而局部类型转换,意思就是针对某个action/model中的属性所定义的特定的类型转换器。
如何编写类型转换器?
不管是全局类型转换,还是局部类型转换,其转换器的编写方法是相同的!只要继承StrutsTypeConverter,重写其中的方法即可。全局类型转换
即针对整个系统中同样类型的属性定义转换器只需:
1、 在类路径的根目录下定义xwork-conversion.properties文件
2、 在文件中用这样的格式声明哪个类型使用哪个转换器:
a) 属性类型的全路径类名=转换器的全路径类名
3、 Struts2将能自动发现这个文件,并根据其中的定义,对特定的类型调用你指定的类型转换器进行类型转换
比如Point类型:
package cn.com.leadfar.model; public class Point { private int left; private int right; public int getLeft() { return left; } public void setLeft(int left) { this.left = left; } public int getRight() { return right; } public void setRight(int right) { this.right = right; } } |
package cn.com.leadfar.struts2.actions; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import cn.com.leadfar.model.Point; public class PointConverter extends StrutsTypeConverter { @Override public Object convertFromString(Map context, String[] value, Class toType) { //TODO 前提条件判断 String p = value[0]; String[] ps = p.split(","); int left = Integer.parseInt(ps[0]); int right = Integer.parseInt(ps[1]); Point point = new Point(); point.setLeft(left); point.setRight(right); return point; } @Override public String convertToString(Map context, Object point) { Point p = (Point)point; return p.getLeft()+"-"+p.getRight(); } } |
cn.com.leadfar.model.Point=cn.com.leadfar.struts2.actions.PointConverter |
局部类型转换
即针对某个Action或Model的属性定义的转换器1、在与Action/Model类同一个包下面,定义 Action/Model类名-conversion.properties文件
2、文件内部用这样的格式来声明哪个属性需要用哪个类型转换器:
属性名=转换器的全路径类名
比如:对于java.util.Date类型,我们可以声明不同的类使用不同的类型转换器
package cn.com.leadfar.model; import java.util.Date; public class User { private Date endDate; public Date getEndDate() { return endDate; } public void setEndDate(Date endDate) { this.endDate = endDate; } } |
package cn.com.leadfar.struts2.actions; import java.util.Date; import cn.com.leadfar.model.Point; import cn.com.leadfar.model.User; import com.opensymphony.xwork2.ModelDriven; public class UserAction implements ModelDriven{ private User user; private Date beginDate; @Override public Object getModel() { if(user == null){ user = new User(); } return user; } public String add(){ return "success"; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public Date getBeginDate() { return beginDate; } public void setBeginDate(Date beginDate) { this.beginDate = beginDate; } } |
package cn.com.leadfar.struts2.actions; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; public class BeginDateConverter extends StrutsTypeConverter { private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); @Override public Object convertFromString(Map context, String[] value, Class toType) { String d = value[0]; try { return format.parse(d); } catch (ParseException e) { e.printStackTrace(); } return null; } @Override public String convertToString(Map context, Object date) { return format.format(date); } } |
package cn.com.leadfar.struts2.actions; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; public class EndDateConverter extends StrutsTypeConverter { private SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); @Override public Object convertFromString(Map context, String[] value, Class toType) { String d = value[0]; try { return format.parse(d); } catch (ParseException e) { e.printStackTrace(); } return null; } @Override public String convertToString(Map context, Object date) { return format.format(date); } } |
User-conversion.properties,文件的内容如下:
endDate=cn.com.leadfar.struts2.actions.EndDateConverter |
然后,在UserAction类所在的包:cn.com.leadfar.struts2.actions下面,再创建一个文件,命名如下:
UserAction-conversion.properties,文件的内容如下:
beginDate=cn.com.leadfar.struts2.actions.BeginDateConverter |
注意,在Struts1中只支持全局类型转换,而不支持局部类型转换!
相关文章推荐
- Struts2中的类型转换(转载及修改)
- [原创]java WEB学习笔记67:Struts2 学习之路-- 类型转换概述, 类型转换错误修改,如何自定义类型转换器
- [转载] 第二章 struts2类型转换
- Struts2.x 学习笔记 之 类型转换器 和 错误提示修改
- Struts2 逐步成长:(四) 类型转换错误提示修改,字段验证
- [转载]struts2 值栈与类型转换
- 五、Struts2之类型转换
- Struts2 的类型转换
- Struts2中转换Date类型的问题
- 2.Struts2的类型转换
- 转载:String和Date类型互相转换(http://wangyu.javaeye.com/blog/187325)
- struts2的类型转换
- Struts2的类型转换器
- 【转载】如何:在各种字符串类型之间进行转换
- struts2日期类型转换
- 关于Struts2的类型转换详解
- Struts2类型转换
- Struts2的类型转换器
- struts2 自学笔记(3)之类型转换
- Struts2之自定义局部类型转换器、全局类型转换器