Struts 2 之类型转换器

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;
    }
}  
时间: 2024-11-10 01:26:39

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

struts局部、全局类型转换器

第01步:编写bean package com.self.bean; import java.util.Date; public class User { private Date birthday = null; public Date getBirthday() { System.out.println("获得-User:" + birthday); return birthday; } public void setBirthday(Date birthday) { System

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

Struts 2中内建了字符串类型和常见类型之间相互转换的转换器,能满足大多数转换需求,但不能完成字符串和User对象之间的转换. OGNL项目中有一个TypeConvert接口,这个接口是自定义类型转换器必须要实现的接口,OGNL还提供了一个实现类: DefaultTypeConverter,自定义类型转换器(UserConverter类)须重写DefaultTypeConverter类的convertValue()方法.该方法可以实现字符串和对象之前相互转换 注册局部类型转换器:注册局部类型

struts(类型转换器)

1. Struts2的类型转换,对于8个原生数据类型以及Date,String等常见类型,Struts2可以使用内建的类型转换器实现自动的转换:但对于自定义的类型转换来说, 就需要我们自己指定类型转器的方式. 2. 类型转换器必须继承DefaultTypeConverter,一般继承它的子类StrutsTypeConverter.action中调用set和get方法时,调用类型转换方法. 3. 自定义类型转换器的实现步骤: 1). 继承StrutsTypeConverter 2). 覆盖conv

笔记02 文件上传、文件下载、类型转换器、国际化的支持

Struts2的上传 1. Struts2默认采用了apache commons-fileupload  2. Struts2支持三种类型的上传组件 3. 需要引入commons-fileupload相关依赖包 * commons-io-1.3.2.jar * commons-fileupload-1.2.1.jar 4. 表单中需要采用POST提交方式,编码类型需要使用:multipart/form-data 5. Struts2的Action     取得文件名称->>规则:输入域的名称+

Struts2之类型转换器

一.类型转换器的应用场景 类型转换是OGNL的一部分,默认的八种基本类型.String.Date会使用类型转换,但是更复杂的类型转换就需要我们自定义了(虽然这个东西一般根本用不到),OGNL可以应用在很多领域,但是在web领域,因为在客户端到服务器端传输的只是字符串,所以这里就有一个需求收缩,我们的需求就变为完成String和复杂对象之间的互相转换.在Struts2中的类型转换则是在客户端的请求参数往Action的成员属性中设置的时候会被调用. 二.如何使用? 1.理论部分 所有的类型转换器都要

关于StrutsTypeConverter类型转换器

<!-- 问题1: 如何覆盖默认的错误消息? 1). 在对应的 Action 类所在的包中新建 ActionClassName.properties 文件, ActionClassName 即为包含着输入字段的 Action 类的类名 2). 在属性文件中添加如下键值对: invalid.fieldvalue.fieldName=xxx 问题2: 如果是 simple 主题, 还会自动显示错误消息吗? 如果不会显示, 怎么办 ? 1). 通过 debug 标签, 可知若转换出错, 则在值栈的 A

【Java EE 学习第35天】【strus2】【类型转换器】【struts2和Servlet API解耦】【国际化问题】

一.类型转换器 1.在动作类action中,声明和表单中name属性的值同名的属性,提供get和set方法,struts2就可以通过反射机制,从页面中获取对应的内容 1 package com.kdyzm.convert; 2 3 4 import com.opensymphony.xwork2.ActionSupport; 5 6 public class TypeConvertAction extends ActionSupport{ 7 private static final long

JAVAWEB开发之Struts2详解(二)——Action接受请求参数、类型转换器、使用Struts2的输入校验、以及遵守约定规则实现Struts2的零配置

Action接受请求参数 作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中 Struts2提供了非常强大的类型转换机制用于请求数据 到 model对象的封装 Struts2和MVC定义关系 StrutsPrepareAndExecuteFilter:控制器 在Struts2中action是什么?(Struts2是一个MVC框架) V:jsp M:action C:action StrutsPrepareAndExecuteFilter Struts2提供了三种数据封装

Struts2之局部与全局类型转换器

定义一个测试类 package struts2.example.action; import java.util.Date; public class HelloWorldAction { private Date birthday; public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { System.out.print(birthday); this.birthday =