`
zengshaotao
  • 浏览: 753251 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Struts2特殊数据类型转换

 
阅读更多

Struts2中会默认可以直接转化已有的数据类型,如int,String,Date等类型,但对于自定义的类型需要人工进行处理转化。以简单的自定义Point类为例,在页面中输入并进行相应的转化后输出。
            <s:form action ="pointCon">                  <s:textfield name="point" label="point"></s:textfield>                  <s:textfield name="age" label="age"></s:textfield>                  <s:textfield name="username" label="username"></s:textfield>                  <s:textfield name="date" label="birthday"></s:textfield>                                    <s:submit label="submit"></s:submit>                  </s:form>    
    
    Struts表单中提交point类型的数据,需要为其指定相应的转化方法
    自定义一个转化类,从ognl中默认的类型转化类继承而来
            public class PointConverter extends DefaultTypeConverter {    
                   @Override    
                   public Object convertValue(Map context, Object value, Class toType) {    
                          //一个表单中,可以有多个同名的field,value为字符串数组,可接收所有的参数    
                          //当客户端向服务器端进行提交,需要转化为point类型    
                          if(Point.class==toType)    
                          {    
                                 String[] str=(String[])value;    
                                 String[] params=str[0].split(",");    
                                 int x=Integer.parseInt(params[0]);    
                                 int y=Integer.parseInt(params[1]);    
                                 Point point=new Point();    
                                 point.setX(x);    
                                 point.setY(y);    
                                 return point;    
                          }    
                          //服务器端需要向客户端返回结果,转化为string类型    
                          if(String.class==toType)    
                          {     Point point =(Point)value;    
                                 int x=point.getX();    
                                 int y=point.getY();    
                                    
                                 String result="x= "+x+" ;y= "+y;    
                                 return result;    
                          }    
                          return null;    
                   }    
    并在处理此form表单的Action文件下新建文件 【[Action文件名]-Conversion.properties】文件,写入配置信息point=com.test.converter.PointConverter,此时就将等号前的类型按照等号后的转化文件中的方法进行处理与转化。
           以上所述为局部配置的转化方法,struts2提供了另外一种全局的转化方法,在src文件目录下新建【xwork-conversion.properties】文件,此文件名固定,同样也写入相应的配置信息,但需注意一点,需指出该类的所在位置,一个示例的配置信息如下:
    com.test.bean.Point=com.test.converter.PointConverter2
    同样的,可以得到一样的效果
        另外,可以不用自己构造类型转化的方法而直接由struts默认提供的类继承而来,范例如下:
            public class PointConverter2 extends StrutsTypeConverter {    
                @Override    
                public Object convertFromString(Map arg0, String[] arg1, Class arg2) {    
                   Point point=new Point();    
                   String[] params=arg1[0].split(",");    
                   int x=Integer.parseInt(params[0]);    
                   int y=Integer.parseInt(params[1]);    
                   point.setX(x);    
                   point.setY(y);    
                   return point;    
                }    
                @Override    
                public String convertToString(Map arg0, Object arg1) {    
                   Point point=(Point)arg1;    
                   int x=point.getX();    
                   int y=point.getY();    
                   String result="[x= "+x+" ,y= "+y+" ]";    
                   return result;    
                }    
            }    
    从StrutsTypeConverter类中继承,只需实现上述两个抽象方法,从字符串转化为相应类型或者从相应类型转化为字符串。
        引入泛型支持后,可通过范围接收标签一样的输入,
            <s:textfield name="point" label="point"></s:textfield>                  <s:textfield name="point" label="point2"></s:textfield>                  <s:textfield name="point" label="point3"></s:textfield>    
    接收到的point将成为String数组,将其读取后存进List当中
            List<Point> list=new ArrayList<Point>();    
                   for(String value:arg1)    
                   {    
                       Point point=new Point();    
                       String[] params=value.split(",");    
                       int x=Integer.parseInt(params[0]);    
                       int y=Integer.parseInt(params[1]);    
                       point.setX(x);    
                       point.setY(y);    
                       list.add(point);    
                   }    
                   return list;    
    显示方法也是相同。
        另外,struts支持另外一种对类的直接赋值,
    <s:textfield name="point.x" label="point"></s:textfield>
    <s:textfield name="point.y" label="point"></s:textfield>
    此时不用配置任何文件,struts会默认地将x,y的值传到point当中构造出相应的Point类,但是此方法对类有一要求,即该类要有默认的构造函数,否则将会失败。在输出显示的时候,要重写该类的toString()方法,否则输出的是实例,而不是按自己要求的输出

分享到:
评论

相关推荐

    Struts2入门教程(全新完整版)

    十、类型转换 57 1.基于Action的直接属性转换 57 2.基于Action的间接属性vo转换 59 十一、注解配置 59 十二、总结 本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及...

    图书管理系统-struts2

    (2) 用户注册,需要通过Struts2字段校验判断用户注册页面中的用户名、密码、年龄、出生日期、邮箱等是否符合校验规则,并对自定义校验器要求密码必须包含数字、字母以及两个以上的特殊字符(!@#$%^&*)。 (3) 对用户...

    struts2.0.jar

    Action、拦截器、验证及类型转换方面都有注释。 插入: 只要把插件JAR文件放到\WEB-INF\lib目录中,即可轻松安装Struts 2插件,不需要手动配置。 · 便于与Spring集成: Struts 2 Action能够感知Spring(Spring-aware...

    java web技术开发大全(最全最新)

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》内容包括Web客户端技术、JSP/Servlet技术、Struts 2(*、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring...

    Java Web程序设计教程

    6.2.1struts2内置类型转换器 117 6.2.2引用类型的转换方式 117 6.2.3特殊对象的类型转换 118 6.2.4类型转换的错误处理 121 6.3输入校验 123 6.3.1输入校验的必要性 123 6.3.2编程方式实现输入校验 125 6.3.3...

    java web开发技术大全

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》内容包括Web客户端技术、JSP/Servlet技术、Struts 2(*、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring...

    Struts in Action中文版

    2. 深入 STRUTS架构..................................................................................37 2.1. 随便谈谈......................................................................................

    struts in Action

    2. 深入STRUTS 架构..................................................................................37 2.1. 随便谈谈.......................................................................................

    java面试题

    答:int是java的原始数据类型,Integer是java为int提供的封装类,java为每个原始数据类型都提供了封装类。 String和StringBuffer的区别? 答:String是不可变的对象,每次对String类型进行改变都相当于产生了一个新...

    Java学习笔记-个人整理的

    {1.6}数据类型转换}{26}{section.1.6} {1.7}方法}{26}{section.1.7} {1.8}运算符}{27}{section.1.8} {1.8.1}自增运算}{28}{subsection.1.8.1} {1.8.1.1}Postincrement}{28}{subsubsection.1.8.1.1} {1.8.1.2}...

    Spring in Action(第二版 中文高清版).part2

    16.2 协同使用Spring和WebWork 2/Struts 2 16.3 集成Spring和Tapestry 16.3.1 集成Spring和Tapestry 3 16.3.2 集成Spring和Tapestry 4 16.4 协同使用Spring和JSF 16.4.1 解析JSF管理的属性 16.4.2 解析Spring...

    FreeMark学习笔记

    为了访问数据模型中名为struts2的书的作者的名字,可以使用如下语法: book.author.name //全部使用点语法 book["author"].name book.author["name"] //混合使用点语法和方括号语法 book["author"]["name"] //全部使用...

    Spring in Action(第2版)中文版

    16.2协同使用spring和webwork2/struts2 16.3集成spring和tapestry 16.3.1集成spring和tapestry3 16.3.2集成spring和tapestry4 16.4协同使用spring和jsf 16.4.1解析jsf管理的属性 16.4.2解析springbean 16.4.3...

    Spring in Action(第二版 中文高清版).part1

    16.2 协同使用Spring和WebWork 2/Struts 2 16.3 集成Spring和Tapestry 16.3.1 集成Spring和Tapestry 3 16.3.2 集成Spring和Tapestry 4 16.4 协同使用Spring和JSF 16.4.1 解析JSF管理的属性 16.4.2 解析Spring...

    java开源包2

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    spring chm文档

    15.4. Struts 15.4.1. ContextLoaderPlugin 15.4.2. ActionSupport 类 15.5. Tapestry 15.5.1. 注入 Spring 托管的 beans 15.6. WebWork 15.7. 更多资源 16. Portlet MVC框架 16.1. 介绍 16.1.1. 控制器 - ...

    freemarker总结

    2,使用+运算符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串再连接,如:${3 + "5"},结果是:35 使用内建的int函数可对数值取整,如: ${ (x/2)?int } ${ 1.1?int } ${ 1.999?int } ${ -1.1?int } ...

    Spring中文帮助文档

    15.4. Struts 15.4.1. ContextLoaderPlugin 15.4.2. ActionSupport Classes 15.5. Tapestry 15.5.1. 注入 Spring 托管的 beans 15.6. WebWork 15.7. 更多资源 16. Portlet MVC框架 16.1. 介绍 16.1.1. 控制...

    Spring API

    15.4. Struts 15.4.1. ContextLoaderPlugin 15.4.2. ActionSupport Classes 15.5. Tapestry 15.5.1. 注入 Spring 托管的 beans 15.6. WebWork 15.7. 更多资源 16. Portlet MVC框架 16.1. 介绍 16.1.1. 控制...

Global site tag (gtag.js) - Google Analytics