`

使用BeanUtils来进行对象的组装

阅读更多

对于BeanUtils这个工具,我也用的不是很多,但是还是有点心得和大家分享下,呵呵~~用过spring的都知道spring的MVC框架中有一个BaseCommandController对象,利用这个对象我们就可以很方便的将从客户端传递过来的参数封装到一个JavaBean对象中去,而不需要我们request.getParameter("name");bean.setName(name);了,从而也简化了不少的工作。其实在structs中也有这样的功能的,不过它用的BeanUtils这个工具类,也就是我今天要给大家说的这个类。

    commons-beanutils组件是Jakarta Commons项目组中的一个,可以到Jakarta官网上去下载。我们今天讨论的主要就是commons-beanutils中的BeanUtils这个类,这个类都是静态方法,可以很方便的操纵各个JavaBean对象,包括获取属性、设置属性等,我们以例子来进行说明。

    假设有如下一个JavaBean对象:

public TestBean
{
    private String stringValue;

    private int intValue;

    public void setStringValue(String value)
    {
        this.stringValue = value;
    }

    public String getStringValue()
    {
        return this.stringValue;
    }

    public void setIntValue(int value)
    {
        this.intValue = value;
    }

    public int getIntValue()
    {
        return this.intValue;
    }
}

    那么我们就可以使用BeanUtils来对其进行设置值和获取值了。如下:

TestBean tb = new TestBean();
BeanUtils.setProperty(tb, "stringValue", "hello world!");
BeanUtils.setProperty(tb, "intValue", 123);

    通过上述的语句我们就可以给新new的对象设置两个属性了,注意其中第一个参数就是我们的属性名称,这里也是我们在使用这个工具的时候最需要注意的地方。这个属性名称就是我们的TestBean中的getXXX方法中的XXX,比如getStringValue中其属性名称就是stringValue,在使用属性名称的时候,除了XXX中的第一个字母不需要大小写之外,其他的部分是需要严格区分大小写的,这也是JavaBean的规范。这里有一点需要特别注意的就是,如果属性名称中第一个单词(我们界定的)只有一个字母的话,那么其属性名称必须大写!我们可以看这样一个例子:

我们给TestBean加如下一个属性:

……
public void setTName(String name)
{
    this.name = name;
}

public void getTName()
{
    return this.name;
}
……

    那么在使用BeanUtils进行属性赋值的时候,如果你这样写:

BeanUtils.setProperty(tb, "tName", "hello");

那么就会被抛出一个异常,表示这个属性找不到,因为按照JavaBean的规范,属性名称中如果有多个单词,则每一个单词的首字母要大写这里BeanUtils就会认为属性TName是两个单词,分别是T和Name,所以取属性的时候第一个字母必须要大写,所以其属性就应该是;TName,那么我们就应该如下写操作语句: 

BeanUtils.setProperty(tb, "TName", "hello");

    这样写才是正确的。那么我们来看在B/S结构的程序中,如何将表单域的参数(不一定是表单域,是参数都可以)转换成一个JavaBean对象,我们以上面的Bean为例子,我们在页面上进行编写如下:

……
<form name="form1" action="/getbean.jsp">
    字符串值:<input type="text" name="stringValue" /><br/>
    数字值:<input type="text" name="intValue" /><br/>
</form>
……

    然后我们在服务器端进行编写如下代码来获取参数,并组装成一个TestBean对象,代码如下:

……
TestBean tb = new TestBean();
BeanUtils.populate(tb, request.getParameterMap());
// 使用BeanUtils工具类来获取对象的属性
System.out.println(BeanUtils.getProperty("stringValue"));
System.out.print(BeanUtils.getProperty("intValue"));
// 直接获取对象的属性
System.out.println(tb.getStringValue());
System.out.println(tb.getIntValue());
……

    我们注意到,在表单区域中编写的几个输入框的名称(红色标识的部分)就是我们的TestBean对象的属性名称,然后服务器端的代码中,我们首先使用request.getParameterMap()来获取提交的参数,并转换成一个map对象存储(键是参数名称,值是提交的值),然后我们使用BeanUtils的populate方法来进行赋值。通过打印后,我们可以看到我们输入的值被成功的设置到对象中去了,可以看到简单的两行代码就可以搞定参数到对象的数据绑定工作,如果一个对象有十几个甚至几十个参数属性的话,那么这样的方式将是非常简便的,至少可以少写十几行甚至几十行的代码。

    可以看到利用BeanUtils这个工具类可以很方便的进行JavaBean的属性操作和request的参数到JavaBean的属性绑定操作。其他的功能大家就可以参看它的API文档了~~~~ 偷笑 

日志原文:http://j2ee.blog.sohu.com/65100784.html

分享到:
评论
6 楼 javazeke 2010-10-22  
记得以前从前从页面拿到form都是String的,要转换类型插到数据库一般都用BeanUtils.copyProperties(x,x)来转换下,,struts1里面有经常用
5 楼 zhudp.cn 2010-10-22  
对于单表的操作,这样的确很方便!
但涉及到多张表,字段也比较多,并且里面有几个相同的字段,这样的写法很难维护。

曾经有一段代码,开发人员走了,后面的人就不知道这里的取值到底是有哪些值,分别从哪个地方传来的。
4 楼 programlv 2010-10-22  
据我所知:Struts1.x也是用了这个包 将Session/Request 里面的键值对 放入ActionForm的
3 楼 llyzq 2010-10-22  
太好了,这个效率高好多,我有空也要把这个项目好好看看
2 楼 kingwood2005 2010-10-21  
还不错,回头研究研究BeanUtils去!
1 楼 dwbin 2010-10-21  
比喜欢这样的操作模式,好慢

相关推荐

    如何使用BeanUtils.copyProperties进行对象之间的属性赋值

    主要介绍了使用BeanUtils.copyProperties进行对象之间的属性赋值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    使用servlet实现注册&登录&解决注册乱码&beanutils;的使用

    使用servlet实现注册&登录&解决注册乱码&beanutils;的使用

    BeanUtils工具

    BeanUtils工具是一种方便我们对JavaBean进行操作的工具,是Apache组织下的产品。beanUtils 可以便于对javaBean的属性、对象进行赋值,beanUtils可以将一个MAP集合的数据拷贝到一个javabean对象中。

    commons-beanutils-1.9.3

    BeanUtils工具由Apache软件基金组织编写,提供给我们使用,主要解决的问题是:把对象的属性数据封装到对象中。在整个J2EE的编程过程中,我们经常会从各种配置文件中读取相应的数据,需要明白的一点是从配置文件中...

    beanutils使用

    beanutils使用的一个小例子,主要完成一个map转化成一个bean的过程

    BeanUtils用法

    BeanUtils用法

    BeanUtils_beanutils_

    BeanUtils 是 Apache commons组件的成员之一,主要用于简化JavaBean封装数据的操作。它可以给JavaBean封装一个字符串数据,也可以将一个表单提交的所有数据封装到JavaBean中。使用第三方工具,需要导入jar包:

    commons-beanutils使用工具包

    commons-beanutils使用工具包

    beanutils中文API.doc

    使用beanutils可轻松利用Java反射机制来完成所需功能,而不需要详细研究反射的原理和使用,同时beanutils类库中提出了动态Bean的概念,可在运行时动态对Bean中属性数据类型进行修改以及增删属性。

    commons-beanutils-1.9.4-API文档-中文版.zip

    赠送jar包:commons-beanutils-1.9.4.jar; 赠送原API文档:commons-beanutils-1.9.4-javadoc.jar; 赠送源代码:commons-beanutils-1.9.4-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.9.4.pom; ...

    beanutils-1.9.3-bin

    BeanUtils是由Apache公司开发的针对操作JavaBean的工具包。...但是由Apache公司开发的BeanUtils会更常用,同时,BeanUtils还需要配合第三方日志工具来使用,这里我们同样使用Apache公司的common logging

    BeanUtils教程

    BeanUtils教程BeanUtils教程BeanUtils教程BeanUtils教程BeanUtils教程BeanUtils教程

    BeanUtils_1.8.3帮助文档

    BeanUtils_1.8.3最新帮助文档,希望对给位有用。。。

    Commons BeanUtils 1.8.3 API

    BeanUtils也是Apache Commons家族中的一员,顾名思义,它是用来对Java Bean来进行处理的。 此文档绝对完整,包使用者满意

    BeanUtils包

    BeanUtils工具由Apache软件基金组织编写,提供给我们使用,主要解决的问题是:把对象的属性数据封装到对象中

    commons-beanutils-1.9.4-API文档-中英对照版.zip

    赠送jar包:commons-beanutils-1.9.4.jar; 赠送原API文档:commons-beanutils-1.9.4-javadoc.jar; 赠送源代码:commons-beanutils-1.9.4-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.9.4.pom; ...

    commons-beanutils-1.9.2下载

    使用beanutils,可以更好的操作数据,对于做框架和理解框架都有很大的作用

    BeanUtils工具 .jar 包

    BeanUtils工具 .jar 包使用很简单 可以参考博客java学习笔记——javaweb之BeanUtils、EL、JSTL

    BeanUtils.txt

    BeanUtils进行bean转换

    commons-beanutils-1.8.0.jar beanutils.jar beanutils.jar工具包

    commons-beanutils-1.8.0.jar beanutils.jar beanutils.jar工具包

Global site tag (gtag.js) - Google Analytics