打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Tapestry开发者指南(5)

 第二章 JavaBeans 和属性

   Tapestry框架基于JavaBeans 和JavaBeans 属性的使用。这个章节将对这些概念作简短的回顾。更加深入的讨论是可参阅Java Tutorial。

2.1 JavaBeans

   当Java对象确切的类型是未知的时候,JavaBeans 框架是操纵Java对象的一个方式。这种当Java对象确切的类型未知时,却能使他们一起工作的能力, 是非常强有力的。这体现了Java作为一种高度动态语言的灵活性,这样的例子在底层语言, 譬如C++ 中是不可能的。

    许多基于组件的框架是以JavaBeans 框架为基础,包括Java 的AWT 和Swing 的GUI库, 还有Tapestry。 想法是这样的, 遵照几种命名规则和编码习惯, 将新类"插入"一个框架中是可能的, 当框架被创建时, 这些类甚至还没写。按Tapestry术语的说法, 这被用来允许创建新的Tapestry组件。

   任一个Java 对象可以作为JavaBean运作; 它只是必须遵循某些命名惯例(在下个部分讨论)。对于框架需要在何处创建一个类的新实例的情况,譬如,当Tapestry创建组件的一个新实例时, Java 类必须实现一个公共的, 无参量的构造器(它也可以实现另外的构造器)。JavaReflection API 允许Tapestry访问一个类的方法、属性和构造器。

2.2 JavaBeans 属性

   对于Tapestry, JavaBeans的中心概念为属性。JavaBeans框架允许Tapestry把任一个对象作为若干已命名属性的一个集合来对待。Tapestry频繁地从这些已命名属性中读取值,并且偶尔地值将写入这些已命名属性中。这里指的属性(property)不同于性质(attribute)... 虽然, 经常,每个属性(property)是由一个性质(attribute)支持。对于Tapestry, 和Reflection API,属性是对象中一套公共的方法。访问属性涉及调用这些方法当中的一个。
例子2.1 JavaBeans getter方法
public type getName()
{
...
}
例子2.2 JavaBeans setter方法
public void setName(type value)
{
...
}
    属性可以是只读或只写的 (也就是说,它也许实现二个方法当中的一个)。类型可以是标量型(布尔, 整型, 等) 或任何Java 类。
   注意命名; 属性名称的第一字母在get或set后面是大写的。JavaBeans属性对于方法名称和属性名称是大小写敏感的。当名称是只取首字母的缩写词时,一种特殊情况存在;这是通过二个或更多的大写字母(以后得到或设置)来标识; 在这种情况下, 属性名称没有第一字母来转换成小写。
作为一种特殊情况, 一个布尔属性可以为getter方法使用一个别名:
例子2.3。JavaBeans getter方法(布尔)
public boolean isName()
{
...
}
    虽然正常实现是得到或设置实例变量, 但是更加复杂的选择是可能的。一个方式是延迟求值, 即, 昂贵的演算被推迟直到实际值是需要的时候,
例如: 例子2.4。JavaBeans 属性的延迟求值
public List userNames = null;

/**
* Returns a List of user names obtained from the database.
*
**/

public List getUserNames()
{
if (userNames == null)
userNames = fetchUserNamesFromDatabase();

return userNames;
}
    这里,方法第一次被调用时, 昂贵的数据库“取”指令发生。值从数据库返回,然后被存于缓存中以备最新调用。另一种普遍的样式是综合的属性。这里, 根本没有真正的性质(attribute), 值总在进行中计算。其一个频繁用途是避免在遭遇空指针时出错。
例子2.5。综合的JavaBeans 属性
/**
* Returns the name of the company‘s account representative, if
* if the company has one, or null otherwise.
*
**/

public String getAccountRepName()
{
AccountRep rep = company.getAccountRep();

if (rep == null)
return null;

return rep.getName();
}
    这个例子创建一个综合属性, accountRepName 。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【转载】TAPESTRY
[开源推荐]面向组件的Web框架tapestry
Java企业应用系统框架的比较与选择
JAVA Web框架比较
在网上摘的几个值得关注的java开源项目
Spring MVC初探
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服