Struts2的类型转换.docx

上传人:b****8 文档编号:9609185 上传时间:2023-05-20 格式:DOCX 页数:12 大小:122.62KB
下载 相关 举报
Struts2的类型转换.docx_第1页
第1页 / 共12页
Struts2的类型转换.docx_第2页
第2页 / 共12页
Struts2的类型转换.docx_第3页
第3页 / 共12页
Struts2的类型转换.docx_第4页
第4页 / 共12页
Struts2的类型转换.docx_第5页
第5页 / 共12页
Struts2的类型转换.docx_第6页
第6页 / 共12页
Struts2的类型转换.docx_第7页
第7页 / 共12页
Struts2的类型转换.docx_第8页
第8页 / 共12页
Struts2的类型转换.docx_第9页
第9页 / 共12页
Struts2的类型转换.docx_第10页
第10页 / 共12页
Struts2的类型转换.docx_第11页
第11页 / 共12页
Struts2的类型转换.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Struts2的类型转换.docx

《Struts2的类型转换.docx》由会员分享,可在线阅读,更多相关《Struts2的类型转换.docx(12页珍藏版)》请在冰点文库上搜索。

Struts2的类型转换.docx

Struts2的类型转换

Struts2的类型转换

struts2的自定义类型转换机制为复杂类型的输入输出处理提供了便捷.struts2已经为我们提供了几乎所有的primitive类型以及常用类型(如Date,String)的类型转换器,我们也可以为我们自定义类添加自定义类型转化器.

struts2为我们提供了一个类型转化器的入口:

ognl.DefaultTypeConverter,或继承org.apache.struts2.util.StrutsTypeConverter,由于StrutsTypeConverter提供了更好的封装,所以建议大家在写转换器时通常采用继承StrutsTypeConverter方式来实现.

StrutsTypeConverter类实质上是DefaultTypeConverter的扩展

publicabstractclassStrutsTypeConverterextendsDefaultTypeConverter

{

}

StrutsTypeConverter中的两个核心方法

publicabstractObjectconvertFromString(Mapcontext,String[]values,ClasstoClass);

publicabstractStringconvertToString(Mapcontext,Objecto);

convertFromString方法用于从前台页面获取字符串,将字符串转化为对象

convertToString方法用于将对象以字符串的方式输出到页面

我们在写struts2自定义类型转换类的时候主要就是覆盖上面两个方法

分类

struts2自定义类型转换从大的方面来讲分两种:

◆局部类型转换

◆全局类型转换

局部类型转换又分为三种:

✧普通实体bean的自定义类型转换

✧基于领域模型的自定义类型转换

✧基于模型驱动的自定义类型转换

无论是全局类型转换还是局部类型转换,转换器与Action之间是用properties文件来关联的,properties文件指明了转换规则

全局类型转换规则:

在classpath下新建文件xwork-conversion.properties(固定名称)

其内容为:

目标转换对象=转换器类(包名+类名)

局部类型转换规则:

在对应的Action的同级目录下新建Action名-conversion.properties(一定要与Action类名对应)

其内容为:

目标转换对象=转换器类(包名+类名)

在局部类型转换中又存在一种特殊情况

基于领域模型的自定义类型转换

它不但要在对应的Action的同级目录下新建Action名-conversion.properties(一定要与Action类名对应)文件,还需在引用模型同级目录下建properties文件取名规则为引用名-conversion.properties

这块不好用文字描述,举个列子:

需求是这样的:

在User类中有个Point对象的引用,现在要基于Point来做自定义类型转换,这里Point与User之间的这层关系就叫做领域模型,在操作User时需要对Point进行自定义类型转换,这时就必须在User类的同级目录下新建User-conversion.properties文件,在文件中指明point对象需要用什么类来进行转换.

我们约定Point类的对象名就为point,而对应的转换类为com.dl.convertor.PointConvertor,对应的Action类为PointUserAtion,PointUserAtion中有一个User类型的属性名为user

那么在PointUserAtion的同级目录中会存在一个名为PointUserAtion-conversion.properties的文件其内容为:

user.point=com.dl.convertor.PointConvertor

//因为在Action中引用的对象名为user而现在要处理的是user中的point属性,所以这里需要使用user.point来指明

同样在User类的同级目录会存在一个名为User-conversion.properties的文件内容为

point=com.dl.convertor.PointConvertor

//因为该文件只针对user,所以只需指明User中的point对象即可不需在添加user否则会出现预想不到的结果

针对局部类型转换三种情况的例子

✧普通实体bean类型转换

实体bean(Point)

/**

*普通的javabean封装坐标

*/

publicclassPoint{

privateintx;

privateinty;

//省略setget方法

}

对应的Action(PointAction)

publicclassPointActionextendsActionSupport{

privatePointpoint;

//省略setget方法

publicStringexecute()throwsException{

returnsuper.execute();

}

}

对应的转换类(PointConvertor)

publicclassPointConvertorextendsStrutsTypeConverter{

/**

*从表单中的string到Point对象

*我们约定以,来分隔这里为了严谨期间最好要进行输入数据的验证

*/

@Override

publicObjectconvertFromString(Mapcontext,String[]str,Classc){

Pointpoint=null;

if(str!

=null||str.length>0){

String[]s=str[0].split(",");

point=newPoint();

intx=Integer.parseInt(s[0]);

inty=Integer.parseInt(s[1]);

point.setX(x);

point.setY(y);

}

returnpoint;

}

/**

*从对象到字符串

*比如页面输出

*/

@Override

publicStringconvertToString(Mapcontext,Objecto){

Pointpoint=(Point)o;

return"("+point.getX()+","+point.getY()+")";

}

}

需要做的配置:

在PointAction的同级目录下新建PointAction-conversion.properties,文件内容为

#目标转换对象=转换器

point=com.dl.convertor.PointConvertor

✧领域模型自定义类型转换

实体bean(Point,User)

publicclassUser{

privateStringname;

privatePointpoint;

//省略setget方法

}

publicclassPoint{

privateintx;

privateinty;

//省略setget方法

}

对应的Action(PointAction)

publicclassUserActionextendsActionSupport{

privateUseruser;

//省略setget方法

@Override

publicStringexecute()throwsException{

returnsuper.execute();

}

}

对应的转换类(PointConvertor)

publicclassPointConvertorextendsStrutsTypeConverter{

/**

*从表单中的string到Point对象

*我们约定以,来分隔这里为了严谨期间最好要进行输入数据的验证

*/

@Override

publicObjectconvertFromString(Mapcontext,String[]str,Classc){

Pointpoint=null;

if(str!

=null||str.length>0){

String[]s=str[0].split(",");

point=newPoint();

intx=Integer.parseInt(s[0]);

inty=Integer.parseInt(s[1]);

point.setX(x);

point.setY(y);

}

returnpoint;

}

/**

*从对象到字符串

*比如页面输出

*/

@Override

publicStringconvertToString(Mapcontext,Objecto){

Pointpoint=(Point)o;

return"("+point.getX()+","+point.getY()+")";

}

}

需要做的配置:

在UserAction的同级目录下新建UserAction-conversion.properties,文件内容为

#目标转换对象=转换器

user.point=com.dl.convertor.PointConvertor

在User的同级目录下新建User-conversion.properties,文件内容为

point=com.dl.convertor.PointConvertor

✧模型驱动自定义类型转换

实体bean(Point)

/**

*普通的javabean封装坐标

*/

publicclassPoint{

privateintx;

privateinty;

//省略setget方法

}

对应的Action(PointModelDrivenAction)

/**

*基于模型驱动的自定义类型转换

*@authorAdministrator

*

*/

@SuppressWarnings("serial")

publicclassPointModelDrivenActionextendsActionSupportimplementsModelDriven{

privatePointpoint;

publicPointgetPoint(){

returnpoint;

}

publicvoidsetPoint(Pointpoint){

this.point=point;

}

publicPointgetModel(){

returnpoint;

}

@Override

publicStringexecute()throwsException{

returnsuper.execute();

}

}

注:

这里切记要生成point的setget方法要不值不能自动进行封装

对应的转换类(PointConvertor)

publicclassPointConvertorextendsStrutsTypeConverter{

/**

*从表单中的string到Point对象

*我们约定以,来分隔这里为了严谨期间最好要进行输入数据的验证

*/

@Override

publicObjectconvertFromString(Mapcontext,String[]str,Classc){

Pointpoint=null;

if(str!

=null||str.length>0){

String[]s=str[0].split(",");

point=newPoint();

intx=Integer.parseInt(s[0]);

inty=Integer.parseInt(s[1]);

point.setX(x);

point.setY(y);

}

returnpoint;

}

/**

*从对象到字符串

*比如页面输出

*/

@Override

publicStringconvertToString(Mapcontext,Objecto){

Pointpoint=(Point)o;

return"("+point.getX()+","+point.getY()+")";

}

}

需要做的配置:

在PointModelDrivenAction的同级目录下新建PointModelDrivenAction-conversion.properties,文件内容为

#目标转换对象=转换器

point=com.dl.convertor.PointConvertor

在User的同级目录下新建User-conversion.properties,文件内容为

point=com.dl.convertor.PointConvertor

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2