Struts2自定义类型转换器分为局部类型转换器和全局类型转换器

(1)局部类型转换器

如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用date类型是可以接收到的,但是如果传的是20101112这样类型的字符串,用date类型是获取不到,并且会出现错误的,struts2提供了一种类型转换器供我们使用。

以下为局部类型转换器的开发步骤

a.首先要写一个类来继承DefaultTypeConverter

b.然后覆盖convertValue这个方法,在里面进行数据转型

c.在action类所在的包下放置ActionClassName-conversion.properties文件,ActionClassName是类名,后面的-conversion.properties是固定的写法,

如:HelloWorldAction-conversion.properties

d.Properties文件里面的内容为:属性名称=类型转换器的全类名(既包名.类名)

如:birthday=com.ljq.type.converter.DateTypeConverter

(2)全局类型转换器

如果业务需求所有的日期都要转换,则可以使用全局类型转换器,只要在src根目录下面放置xwork-conversion.properties文件,并且properties文件中的内容为:

待转换的类型=类型转换器的全类名

如:java.util.Date =com.type.Converter.DateTypeConverter 即可

DefaultTypeConverter

日期转换器

public class DateTypeConverter extendsDefaultTypeConverter {

      public Object convertValue(Map<String, Object> context, Object value,Class toType) {
      SimpleDateFormat sdf = newSimpleDateFormat("yyyyMMdd HH:mm:ss");
             try {
                    if (toType == Date.class) {// 当字符串向Date类型转换时
                           //页面传递过来的参数被封装成了String[]
                           String[] params =(String[]) value;
                           returnsdf.parseObject(params[0]);
                    } else if (toType ==String.class) { // 当Date转换成字符串时
                           Datedate=(Date)value;
                           returnsdf.format(date);
                    }
             } catch (java.text.ParseExceptione) {
                    e.printStackTrace();
             }
                    return null;
             }
}

对象转换器

import ognl.DefaultTypeConverter;
public class UserConverter extends DefaultTypeConverter { 

    @Override
    public Object convertValue(Map context,Object value, Class toType) {
         //从页面转到服务器 toType表示要转化的类型,
        if (toType==User.class) {
            /*页面传递过来的参数被封装成了String[]*/
            String[] params = (String[])value;
            User user = new User();
            /*取出user字符串,按,分割成数组*/
            String[] uservalues =params[0].split(",");
            user.setName(uservalues[0]);
            user.setPass(uservalues[1]);
            return user;
        }
        /*从服务器转到页面,显示user参数值,则要转换成字符串*/
        else if (toType==String.class) {
            User user =(User)value;
            return "姓名:"+user.getName()+", 密码:"+user.getPass();
        }
        return null;
    }
}  

Struts 2 之类型转换器的更多相关文章

  1. struts局部、全局类型转换器

    第01步:编写bean package com.self.bean; import java.util.Date; public class User { private Date birthday ...

  2. Struts入门学习(三)---自定义类型转换器

    类型转换器是将浏览器传递的参数进行转换为了与服务器端的参数匹配,先举个例子如果我们想往服务器传递日期类型的参数时我们要怎么让浏览器传过去的让服务器明白 我们新建一个类 ConverterTest.ja ...

  3. Struts(二十):自定义类型转换器

    如何自定义类型转换器: 1)为什么需要自定义类型转化器?strtuts2不能自动完成字符串到所有的类型: 2) 如何定义类型转化器? 步骤一:创建自定义类型转化器的类,并继承org.apache.st ...

  4. Struts 2 类型转换器 输入校验 拦截器

    Struts 2中内建了字符串类型和常见类型之间相互转换的转换器,能满足大多数转换需求,但不能完成字符串和User对象之间的转换. OGNL项目中有一个TypeConvert接口,这个接口是自定义类型 ...

  5. 8.Struts2类型转换器

    类型转换器1.引入在Struts2中,请求参数类型不仅可以是String,还可以是其它类型.如,定义一个请求参数birthday为Date类型,给其赋值为1949-10-1,则birthday接收到的 ...

  6. 【Java EE 学习 35 上】【strus2】【类型转换器】【struts2和Servlet API解耦】【国际化问题】【资源文件乱码问题已经解决】

    一.类型转换器 1.在动作类action中,声明和表单中name属性的值同名的属性,提供get和set方法,struts2就可以通过反射机制,从页面中获取对应的内容 package com.kdyzm ...

  7. Struts2:类型转换器

    常规的String,int能自动转换,但是,有些类型不是这么简单,比如输入字符串,但需要Date.自定义类型,因此需要自定义类型转换类型转换器分全局和局部按惯例,局部的优先级高于全局 需求: 1.输入 ...

  8. Struts2框架的自定义类型转换器

    前言:对于java的基本数据类型及一些系统类(如Date类.集合类),Struts2提供了内置类型转换功能,但是也有一定的限制.所以就演示出自定义类型转换器 一.应用于局部类型转换器 eg.用户登录出 ...

  9. Struts2之类型转换器

    一.类型转换器的应用场景 类型转换是OGNL的一部分,默认的八种基本类型.String.Date会使用类型转换,但是更复杂的类型转换就需要我们自定义了(虽然这个东西一般根本用不到),OGNL可以应用在 ...

随机推荐

  1. error and solve

    1.缺少对应的jar包 出错信息: Multiple markers at this line - The type org.springframework.beans.factory.Aware c ...

  2. Redis管理之持久化

    Redis的一大重要特征就是支持持久化. Redis提供了两种不同的持久化方式:RDB和AOF. RDB持久化可以在指定的时间间隔内生成数据集的快照.由于是定期的生成数据集的快照,所以,如果服务器出现 ...

  3. codesforces 671D Roads in Yusland

    Mayor of Yusland just won the lottery and decided to spent money on something good for town. For exa ...

  4. bzoj 5286: [Hnoi2018]转盘

    Description Solution 首先注意到一个点不会走两次,只会有停下来等待的情况,把序列倍长 那么如果枚举一个起点\(i\),答案就是 \(min(max(T[j]+n-(j-i)-1)) ...

  5. 2015 多校联赛 ——HDU5373(模拟)

    Problem Description In this problem, we should solve an interesting game. At first, we have an integ ...

  6. 【SYZOI Round1】滑稽的树

    Description zzsyz实验楼里面种了一棵滑稽树,只有滑稽之力达到大乘期的oier才能看到.虽然我们看不到,但是还是知道一些信息: 这真的是一棵树,由n个节点,n-1条边联通.一号滑稽果同时 ...

  7. 习题9-5 UVA 242

    Stamps and Enovelope Size 题意: 给你最多贴S张邮票.有N个邮票集合,每个集合有不同的面值.问哪个集合的最大连续邮资最大,输出最大连续邮资和集合元素. 如果不止一个集合结果相 ...

  8. BZOJ4727 [POI2017]Turysta

    这题太神了还是去看刺儿神题解吧. http://www.cnblogs.com/neighthorn/p/6538364.html #include <cstdio> #include & ...

  9. 谈谈如何选择合适的MySQL数据类型

    MySQL数据类型选择 一 .选择原则 更小的通常更好:一般情况下选择可以正确存储数据的最小数据类型.越小的数据类型通常更快,占用磁盘,内存和CPU缓存更小. 简单就好:简单的数据类型的操作通常需要更 ...

  10. C#中Fun简单介绍及运用到项目中与缓存(本地缓存,Redis)结合使用

     1.简单介绍Fun C#中Fun和Action有点类似,都是一个委托方法,不同的是Func是有返回值的,而Action没有. (T)此委托封装的方法的参数类型. 备注:详情了解Fun到(https: ...