Struts2类型转换
来源:互联网 发布:java入门视频教程 编辑:程序博客网 时间:2024/06/17 04:28
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;
publicclass Point {
privateintleft;
privateintright;
publicint getLeft() {
returnleft;
}
publicvoid setLeft(int left) {
this.left = left;
}
publicint getRight() {
returnright;
}
publicvoid setRight(int right) {
this.right = right;
}
}
针对Point类型的转换器:
package cn.com.leadfar.struts2.actions;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import cn.com.leadfar.model.Point;
publicclass PointConverterextends 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();
}
}
xwork-conversion.properties文件的内容如下:
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;
publicclass User {
private DateendDate;
public Date getEndDate() {
returnendDate;
}
publicvoid 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;
publicclass UserActionimplements ModelDriven{
private Useruser;
private DatebeginDate;
@Override
public Object getModel() {
if(user ==null){
user =new User();
}
returnuser;
}
public String add(){
return"success";
}
public User getUser() {
returnuser;
}
publicvoid setUser(User user) {
this.user = user;
}
public Date getBeginDate() {
returnbeginDate;
}
publicvoid setBeginDate(Date beginDate) {
this.beginDate = beginDate;
}
}
假设我们希望UserAction类中的beginDate属性和User类中endDate属性,分别使用不同的类型转换器,如下所示:
package cn.com.leadfar.struts2.actions;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
publicclass BeginDateConverterextends StrutsTypeConverter {
private SimpleDateFormatformat = new SimpleDateFormat("yyyy-MM-dd");
@Override
public Object convertFromString(Map context, String[] value, Class toType) {
String d = value[0];
try {
returnformat.parse(d);
} catch (ParseException e) {
e.printStackTrace();
}
returnnull;
}
@Override
public String convertToString(Map context, Object date) {
returnformat.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;
publicclass EndDateConverterextends StrutsTypeConverter {
private SimpleDateFormatformat = new SimpleDateFormat("yyyy/MM/dd");
@Override
public Object convertFromString(Map context, String[] value, Class toType) {
String d = value[0];
try {
returnformat.parse(d);
} catch (ParseException e) {
e.printStackTrace();
}
returnnull;
}
@Override
public StringconvertToString(Map context, Object date) {
returnformat.format(date);
}
}
那么,我们需要在User类的包:cn.com.leadfar.model下面,创建一个文件,命名如下:
User-conversion.properties,文件的内容如下:
endDate=cn.com.leadfar.struts2.actions.EndDateConverter
表示User类中的endDate属性,使用EndDateConverter这个类型转换器。
然后,在UserAction类所在的包:cn.com.leadfar.struts2.actions下面,再创建一个文件,命名如下:
UserAction-conversion.properties,文件的内容如下:
beginDate=cn.com.leadfar.struts2.actions.BeginDateConverter
表示UserAction类中的beginDate属性,使用BeginDateConveter这个类型转换器。
注意,在Struts1中只支持全局类型转换,而不支持局部类型转换!
- 【Struts2】:Struts2的类型转换
- struts2类型转换
- struts2类型转换续
- Struts2的类型转换
- struts2 类型转换流程
- Struts2中的类型转换
- [struts2]类型转换笔记
- struts2的类型转换
- Struts2之类型转换
- struts2的类型转换
- struts2 类型转换
- struts2 类型转换
- Struts2类型转换
- struts2日期类型转换
- struts2类型转换
- Struts2类型转换
- Struts2的类型转换
- Struts2日期类型转换
- 上交考研复试07年Powerful Calculator
- myBatis学习笔记(7)——调用存储过程
- 转载一篇文章【实现app上对csdn的文章查看,以及文章中图片的保存】
- Hibernate高级
- 第十八届科博会,中科宇杰与您同在
- Struts2类型转换
- Shell脚本学习
- 投资、理财、炒股记事
- 解决cocos2dx创建的项目在eclipse下编译时报无法打开windows.h文件
- 可怕的阶乘
- 欢迎使用CSDN-markdown编辑器
- 开始自己的原创博客之旅
- STM32正点原子MINI板——学习1实验平台简介
- C#中的string