`
zengshaotao
  • 浏览: 787362 次
  • 性别: 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数据类型转换器

    这篇博客“Struts2数据类型转换器”可能深入探讨了这个主题,虽然具体的细节无法在此给出,但我们可以根据Struts2中数据类型转换的工作原理来展开讨论。 在Java Web开发中,用户通过表单提交的数据通常是字符串形式...

    Struts2 自定类型转换器(三十四)

    在实际项目中,自定义类型转换器可能用于处理如日期格式、货币格式、枚举类型等特殊数据类型的转换。例如,我们可以创建一个转换器处理日期输入,将用户输入的"yyyy-MM-dd"格式字符串转换为Java的`java.util.Date`...

    struts2 类型转换器

    Struts2通过自定义类型转换器,能够自动将这些字符串转换为相应的数据类型。 在描述中提到的博客链接(由于实际无法访问,以下内容基于Struts2类型转换器的通用知识)通常会详细解释如何创建和注册自定义类型转换器...

    struts2 类型转换 数据校验

    1. **内置转换器**:Struts2提供了一系列内置的转换器,如StringToBooleanConverter、StringToDateConverter等,可以处理常见的数据类型。 2. **自定义转换器**:如果需要处理特殊类型或有特定转换规则,可以通过...

    Struts2自定义类型转换

    在Web开发中,数据类型转换是一项常见的需求,特别是在用户输入的数据与后端处理的数据类型不一致时。Struts2框架提供了强大的类型转换机制,允许开发者自定义类型转换器,以满足特定业务逻辑的需求。本文将深入探讨...

    Struts2的自动类型转换及自定义类型转换[文].pdf

    在处理HTTP请求时,由于HTTP协议规定所有参数都以字符串形式传递,因此Struts2提供了一种称为类型转换的机制,以便将这些字符串转换为应用程序所需的其他数据类型,如int、Date等。这个过程在Struts2中是自动的,...

    struts2注册转换器

    在Struts2中,类型转换是处理用户输入数据的关键环节,它允许开发者将前端表单提交的数据转换为服务器端可处理的类型。在本案例中,我们将深入探讨“struts2注册转换器”,特别是如何将特定的日期格式如"20110202...

    [原]Struts2类型转换

    在Struts2中,类型转换是一项关键功能,它允许框架将用户输入的数据自动转换为应用程序需要的特定数据类型。这篇博客文章可能是关于Struts2内部的类型转换机制及其使用的探讨。 在Struts2中,类型转换是通过`...

    struts2学习笔记四(第4讲.Struts2的类型转换续)

    在"Struts2学习笔记四(第4讲.Struts2的类型转换续)"中,我们将会深入探讨Struts2中的类型转换机制,这是一个核心特性,用于处理Action类属性与HTTP请求参数之间的数据类型转换。 在HTTP请求中,数据通常是字符串...

    struts2数据转换示例

    在描述中提到的"interceptor"文件,很可能包含了关于拦截器(Interceptor)的配置或示例代码,因为拦截器是Struts2中实现类型转换的关键组件之一。 Struts2的拦截器是一种AOP(面向切面编程)的概念,它们可以拦截...

    Struts2之类型转换器的使用案例struts002

    总的来说,Struts2的类型转换器机制为处理复杂数据类型提供了便利,使得我们可以根据需求自由定制数据转换逻辑,保证了从HTTP请求到业务逻辑处理之间的数据一致性。通过自定义类型转换器,我们可以更好地控制数据...

    struts2类型转换convertToString不被调用的疑惑

    在Struts2中,自定义类型转换器通常需要实现`org.apache.struts2.util.TypeConverter`接口,并覆盖`convertValue`和`convertToString`方法。`convertToString`方法在某些场景下会被调用,比如在显示错误消息时,需要...

    Java实训教程 Java软件开发实战 Java开发框架介绍 struts2_10_转换器 共22页.pptx

    Struts2提供了许多内置的类型转换器,可以满足大部分常见数据类型的转换需求。但是,对于某些特殊的数据类型或复杂的业务逻辑,可能需要开发者自定义转换器。 #### 五、自定义类型转换器 1. **实现接口**: - ...

    struts2如何配置与自定义类型转换

    然而,当需要对自定义对象或者特殊的数据类型进行转换时,就需要自定义类型转换器。 **局部自定义类型转换**: 如果你只想为特定的Action中的某个字段创建类型转换器,你需要创建一个类继承自`StrutsTypeConverter`...

    传智播客struts2教程

    最后,"全局类型转换器"是Struts2提供的一个高级特性,用于处理数据类型的转换。`14_传智播客struts2.1视频教程_全局类型转换器.rar`会解释如何创建自定义的类型转换器,并将其注册为全局转换器,以便在整个应用中...

    Struts2.0属性转换器的作用说明

    总的来说,Struts2.0的属性转换器是框架中不可或缺的一部分,它简化了数据类型转换的过程,提高了代码的可维护性和复用性。通过自定义转换器,开发者可以更好地控制数据处理逻辑,满足项目中的各种复杂需求。了解和...

    Struts2例子6

    Struts2是一个强大的MVC(模型-视图-控制器)框架,被广泛应用于Java Web开发。在Struts2中,转换器...通过实践"Struts2例子6",开发者可以更深入地了解Struts2框架的工作原理,提高处理复杂数据类型转换的能力。

    struts2基本类库

    Struts2自动将请求参数转化为Action属性的类型,但也可以自定义类型转换器以处理特殊的数据格式。 9. **Struts2的安全问题**: 虽然Struts2强大且灵活,但也曾曝出过安全漏洞,如S2-005、S2-016等。开发者应当...

    Struts的自定义转换器

    自定义转换器使得Struts框架更加灵活,能够处理复杂或特殊的数据类型,提高了代码的可维护性和用户体验。通过编写自定义转换器,开发者可以确保数据转换过程符合业务规则,减少因类型不匹配导致的错误。在实际开发中...

    struts2.0开发最精简教程 转换器篇

    然而,有时默认的数据类型转换可能无法满足需求,比如日期格式、货币格式等特殊数据类型,这时候就需要自定义转换器来介入。 自定义转换器的实现主要分为以下几步: 1. **创建转换器类**:继承`org.apache.struts2...

Global site tag (gtag.js) - Google Analytics