文档章节

beanutils.Converter使用探索

五大三粗
 五大三粗
发布于 2015/11/02 21:08
字数 614
阅读 104
收藏 0
点赞 0
评论 0

org.apache.commons.beanutils.ConvertUtils

这是一个接口,其中只包含一个方法 convert (java.lang.Class type, java.lang.Object value) ,其功能是将输入参数 value 转换为指定类型 type 的实例。

范例:

我建立了一个 Rectangle 对象,并为这 rectangle 对象建立了一个 RectangleConverter ,随后将 RectangleConverter 注册进 ConvertUtils 中。形为 {3,2} 的字符串可以转变为一个 rectangle 

这里唯一要说明的就是 RectangleConverter 中要实现两个 converter 方法,也就是要对接口 Converter 中定义的方法进行 overload,从而可以实现字符串和 Rectangle 之间的互相转换了。

 

package beanutil; 
import java.util.StringTokenizer; 
import org.apache.commons.beanutils.ConvertUtils; 
import org.apache.commons.beanutils.Converter;

public class RectangleConverter implements Converter {

 

    public Object convert(Class arg0, Object arg1) { 
       if (arg1 instanceof String) 
    
            return convert(arg0, arg1.toString()); 
       return convert(arg0, (Rectangle) arg1);

   }

    public Rectangle convert(Class rectangleType, String para) { 
    
       StringTokenizer token = new StringTokenizer(para, ","); 
          
 Double temp1, temp2 = null; 
         
  temp1 = (Double) ConvertUtils.convert(token.nextToken(), Double.class); 
          
 temp2 = (Double) ConvertUtils.convert(token.nextToken(), Double.class); 
         
  Rectangle rect = new Rectangle(); 
            
rect.setLength(Math.max(temp1.doubleValue(), temp2.doubleValue())); 
           
 rect.setWidth(Math.min(temp1.doubleValue(), temp2.doubleValue())); 
          
 return rect;

       }

 

 public String convert(Class string, Rectangle rect) {

       StringBuffer buffer = new StringBuffer("("); 
      
 buffer.append(rect.getLength()).append(","); 
       
 buffer.append(rect.getWidth()); 
      
  return buffer.toString();

       }

 

}

 

RectangleConverter注册到ConvertUtils中,我们就可以把形为{4,5}的字符串转换为Rectangle的实例,同样可以将Rectangle的实例转换为形为{4,5}的字符串。

 

另附Rectangle的代码:

package beanutil;

public class Rectangle {

 

       double length = 0.0d; 
     
  double width = 0.0d; 
       
 public double getLength() { 
    
        return length;

       }

 

       public void setLength(double length) { 
        
  this.length = length; 
      
}

     public double getWidth() {

    return width;

     }

     public void setWidth(double width) {

            this.width = width; 
   
 }

 

 

 

 

      

 

 

 

 

       public double computeArea(){

 

 

 

 

              return length*width;

 

 

 

 

       }

 

 

 

 

      

 

 

 

 

       public String toString(){

 

 

 

 

              StringBuffer buffer = new StringBuffer("(");

 

 

 

 

              buffer.append(getLength()).append(",");

 

 

 

 

              buffer.append(getWidth()).append(")");

 

 

 

 

              return buffer.toString();

 

 

 

 

       }

 

 

 

 

}

}

















1)创建如下类:
package com.forever.util;

import java.util.*;
import org.apache.commons.beanutils.*;
import java.text.SimpleDateFormat;

public class DateConvert implements Converter {
static SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// HH:mm:ss

public DateConvert() { 


public Object convert(Class type, Object value) { 
if(value==null)return null; 
if(((String)value).trim().length()==0)
return null; 
if(value instanceof String) { 
try { 
//解析接收到字符串 
return df.parse((String)value); 
} catch (Exception ex) {
//发生解析异常
throw new ConversionException("输入的日期类型不合乎yyyy-MM-dd HH:mm:ss" + value.getClass()); 

} else { 
//其他异常 
throw new ConversionException("输入的不是字符类型" + value.getClass()); 

}
}

2)然后在你的系统某处使用如下(如web的init方法)
ConvertUtils.register(new DateConvert(),java.util.Date.class);
参数用于表示DateConvert类负责处理java.util.Date类型的转化。如:
package com.forever.util;

import org.apache.struts.action.ActionServlet;
import javax.servlet.ServletException;
import org.apache.commons.beanutils.ConvertUtils;

public class ActiveServlet extends ActionServlet {

/**
* 重载init()方法
* 为struts解析重新注册一些改造过的表单元素数据解析方法
*/
public void init() throws ServletException {
super.init();
ConvertUtils.register(new DateConvert(), java.util.Date.class);
}
}
3)在web.xml文件中加入或修改成如下内容:

< servlet >
< servlet-name >action< /servlet-name >
< servlet-class >com.forever.util.ActiveServlet< /servlet-class > 
< init-param >
< param-name >config< /param-name >
< param-value >/WEB-INF/struts-config.xml< /param-value >
< /init-param >
...........
< /servlet >

当用到BeanUtils.getProperty()时,碰到Date这种类型就发生转换

© 著作权归作者所有

共有 人打赏支持
五大三粗
粉丝 156
博文 2212
码字总数 4566042
作品 0
广州
程序员
探索python--Robert J. Brunner

IBM的developerworks中找到的关于python的连载,作者:Robert J. Brunner 是 National Center for Supercomputing Applications 的一名研究科学家和伊利诺斯州大学香槟分校的天文学助理副教授...

Rebecca.Hu
2012/09/27
0
0
PHP内核探索:Zend虚拟机

通过前面的学习,我们了解到一个PHP文件在服务器端的执行过程包括以下两个大的过程: 递给php程序需要执行的文件, php程序完成基本的准备工作后启动PHP及Zend引擎, 加载注册的扩展模块。 ...

旋转木马-千里马
2016/01/21
53
0
移动应用众测之“Bug探索测试”实战

认识老高 老高,BeeTest众测平台创始人,低调实干的测试业界专家,曾供职国内上市公司,现担任富海阳光公司CEO。15年以上金融IT从业经验,曾主持多个大型金融IT项目的测试咨询、设计、实施。...

qq5a4b38e1474ac
01/02
0
0
硅谷Spring项目组专家教你利用Spring Cloud构建微服务

src="https://mmbiz.qlogo.cn/mmbiz/tibrg3AoIJTuFDicicUn0SS2W0qcVsRz88M3ejbY1FyA14DNxZSK1iaRSMKTKKOQWP3zlyEJwZHy7wWoaGQl9ZML0Q/0?wxfmt=jpeg" data-ratio="0.6036363636363636" data-t......

Kenny Bastani
2016/07/05
0
0
德国航天局在欧洲最大火山测试机器人,执行火星探测任务

  【德国航天局在欧洲最大火山测试机器人,准备执行火星探测任务】拟被用于月球和火星探测任务的机器人日前在表面环境适宜的意大利埃特纳火山完成测试,它有3英尺高,有4个轮子。团队中的科学...

人工智能观察君
2017/07/05
0
0
proc文件系统探索

原文地址 http://www.kerneltravel.net/?p=281 proc文件系统是linux内核设计中一个经典的部分,她允许用户动态的查看内核的运行情况,包括当前系统中所有进程运行的信息,系统硬件信息, 内存...

sunzeduo
2014/10/10
0
0
几何画板有哪些特色

几何画板是一种在数学,物理的教学中常见的使用工具。帮助很多的用户随心所欲的完成自己的课件,给大家提供了很多的方便。下面我们来给大家介绍介绍几何画板有哪些特色? 几何画板特色主要体...

学术研究软件
2016/04/05
55
0
谷歌开源 Embedding Projector 高维数据可视化

近段时间以来,机器学习领域内的进展已经催生出了很多激动人心的结果,其应用已经延展到了图像识别、语言翻译、医学诊断等许多领域。对研究科学家来说,随着机器学习系统的广泛应用,理解模型...

达尔文
2016/12/09
2.1K
1
Pexpect自动交互系统

Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块。 Pexpect 的使用范围很广,...

Grodd
2017/11/01
0
0
机器学习-第十一讲--过拟合

1.介绍 在探索回归时,我们简短的提到过度拟合及它可能导致的一些问题。在这节课中,我们将会探索怎样定义过拟合及可以做些什么来避免这种情况。为了探索过度拟合,我们将会使用关于一些汽车...

Betty__
2016/11/01
22
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
9分钟前
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
19分钟前
0
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
29分钟前
0
0
Confluence 6 安装补丁类文件

Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...

honeymose
39分钟前
0
0
非常实用的IDEA插件之总结

1、Alibaba Java Coding Guidelines 经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C...

Gibbons
47分钟前
0
0
Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jdk来运行...

TaoXu
47分钟前
0
0
TensorFlow,从一个 Android Demo 开始

TensorFlow Android Demo 项目地址 Machine Learning 既然提到了 TensorFlow,那是不是得神经网络、机器学习了解下? 如果你能坚持把 机器学习速成课程 给啃完了,觉得还挺有兴趣的,那可以考...

孟飞阳
49分钟前
0
0
JVM学习笔记二:内存结构规范

1、JVM基本结构图 2、java堆(Heap) 3、方法区(Method Area) 4、程序计数器 5、JAVA栈图解 局部变量表:八大基本类型,还可以存储引用类型 上一篇:JVM学习笔记一:类加载机制介绍...

刘祖鹏
55分钟前
0
0
mui集成微信H5支付(返回白屏问题已经解决)

一.项目需求 因为公司人员缺少,没有专门开发安卓和ios的人员,为了项目尽早上线采用了混合APP开发的方式,我选择了MUI混合开发框架,项目中需要在用户购买VIP会员的时候进行支付,所以需要在项目...

银装素裹
59分钟前
1
0
SpringBoot集成Redis--配置自定义的RedisCacheManager

配置自定义的RedisCacheManager--1自定义键生成规则 默认的键生成器 当不指定缓存的key时,SpringBoot会使用SimpleKeyGenerator生成key。 SimpleKeyGenerator SimpleKey 查看源码可以发现,它...

karma123
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部