`
chinajavawolf
  • 浏览: 117058 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

(C6)Tapestry IoC:Type Coercion

阅读更多
本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。
chinajavawolf  
类型强制
 
Tapestry 常常必需强制转换对象的类型。通过强制,我们能转换某些类型的对象为有相似内容的不同类型的新对象:一个常用的例子是强制转换一个string为integer或double。
 
尽管这些强制转换类型常发生在tapestry-core内(包括强制转换组件参数),这也发生在tapestry-ioc内,比如在一个构建器方法内注入一个值要优于注入一个服务。
 
在Tapestry内的相似内容,类型转换是可扩展的。根基是一个TypeCoercer服务。它的结构由许多CoercionTuples组成。每个元组(tuple)定义如何强制转换类型。强制的初始设置主要集中在不同的数字类型转换。
 
少数特殊的强制转换涉及到null;Object-->List 包裹一个独立对象作为一个单独的列表。随后我们需要null-->List来确保null抑制无效(null stays null),这优于一个单独的只有孤立的为null的元素列表。
Tapestry可以窜改必须的强制转换。例如,假定它必须强制转换一个StringBuffer为一个Integer;TypeCoercer将串联一系列的强制转换。
1.       Object --> String
2.       String --> Long
3.       Long --> Integer
 
贡献新的强制
 
TypeCoercer是可扩展的,你可以添加你所希望的强制转换。例如,让我们假定你有一个Money类型描绘许多现金,并且你想要能够在BigDecimal和Money间转换。此外,让我们设想Money有一个接受一个BigDecimal参数的构造器。我们将使用少量的Tapestry IOC 配置告知TypeCoercer关于这个强制转换的信息。
 
  1. public static void contributeTypeCoercer(Configuration<CoercionTuple> configuration)   
  2.    {   
  3.      Coercion<BigDecimal, Money> coercion = new Coercion<BigDecimal, Money>()   
  4.      {   
  5.        public Money coerce(BigDecimal input)   
  6.        {   
  7.          return new Money(input);   
  8.        }   
  9.      };   
  10.         
  11.      configuration.add(new CoercionTuple<BigDecimal, Money>(BigDecimal.class, Money.class, coercion));        
  12.    }   
  13.     
 此外,因为TypeCoercer知道如何强制转换Double到BigDecimal,或者由Integer到BigDecimal(到Long到Double),所有这些强制转换都能很好的工作。
 
当从null创建一个强制转换时,使用Void.cass作为源类型。例如,内建的强制转换从null到Boolean是这样实现的:
  1. configuration.add(new CoercionTuple(void.class, Boolean.class,   
  2.        new Coercion<Void, Boolean>()   
  3.        {   
  4.            public Boolean coerce(Void input)   
  5.            {   
  6.                return false;   
  7.            }   
  8.        }));  
分享到:
评论

相关推荐

    tapestry5.3.5 IOC用户登陆权限

    在Tapestry中,IOC容器负责管理对象的生命周期和依赖关系,包括安全相关的服务。 在Tapestry 5.3.5中,实现用户登录权限通常涉及以下几个关键知识点: 1. **身份验证服务**:这是处理用户身份验证的核心组件。通常...

    tapestry-ioc-5.0.3-src

    在"tapestry-ioc-5.0.3-src"这个压缩包中,我们可能找到Tapestry IOC框架的源代码,这对于开发者深入理解其工作原理和定制功能非常有价值。 1. **依赖注入(DI)**:Tapestry IOC的核心概念就是DI,它允许对象在...

    Tapestry.5.Building.Web.Applications.pdf

    ### Tapestry 5:构建 Web 应用程序 #### 一、Tapestry 5 概述 Tapestry 5 是一个强大的 Java Web 开发框架,它为开发者提供了高效且简洁的方式去创建复杂的 Web 应用程序。本书《Tapestry 5:构建 Web 应用程序》...

    tapestry源码 api等

    1. **Tapestry Core**: 这是Tapestry框架的基础部分,包含了核心组件、服务容器(Tapestry IoC)和页面生命周期管理。通过源码分析,我们可以理解其如何实现页面组件的渲染、事件处理和依赖注入。 2. **Tapestry ...

    Tapestry 5.4.1 相关jar文件

    2. **tapestry-ioc.jar**:Tapestry依赖注入(IoC)容器,用于管理对象的创建、配置和生命周期,使得代码更加松耦合。 3. **tapestry-webresources.jar**:处理静态资源如CSS、JavaScript和图片,支持压缩、合并和...

    Tapestry开发

    &lt;tapestry:propertySelection name="country" label="Country" model="${countries}" /&gt; ``` **14. Table组件:** - **用途:**用于创建表格。 - **示例代码:** ```xml &lt;tapestry:table data-model="${users}...

    apache-tapestry-5.3.8-bin.zip

    4. **Tapestry IoC (Inversion of Control)**:`tapestry-ioc-5.3.8.jar`实现了依赖注入容器,使得对象的创建和管理变得更加简单,同时也促进了代码的解耦。开发者可以声明服务并定义它们之间的依赖关系,IoC容器会...

    优化大使tapestry-bin-5.0.18.zip

    这个压缩包包含了多个以"Tapestry"开头的子文件,如 "tapestry-core", "tapestry-hibernate", "tapestry-ioc", "tapestry-upload", 和 "tapestry-spring",这些都是Tapestry框架的不同模块或插件。这些文件的后缀是...

    tapestry学习入门资料

    "tapestry学习入门资料" Tapestry 是一个开源的基于 servlet 的应用程序框架,它使用组件对象模型来创建动态的、交互的 web 应用。 Tapestry 使得 Java 代码与 HTML 完全分离,利用这个框架开发大型应用变得...

    Tapestry5.0.7

    - **tapestry-ioc**:Tapestry 的依赖注入和服务容器模块,是Tapestry的核心组件之一。 - **tapestry-tutorial1**:可能是一个示例教程项目,帮助开发者学习和理解Tapestry的基本用法。 - **tapestry-annotations*...

    Tapestry字典0.1.pdf

    - **示例**: `&lt;tapestry:component id="example" type="com.example.ExampleComponent"&gt;` **1.5 使用下拉列表框 (combobox)** - **定义**: 下拉列表框是一种允许用户从多个选项中选择一项或多项的UI控件。 - **实现...

    tapestry5 自定义组件

    import org.apache.tapestry5.ioc.annotations.Inject; public class MyEmail { @Persist private String recipient; @Inject private MailService mailService; public void sendEmail() { // 使用 ...

    tapestry5.2.6 jar包

    6. **Spring集成**:通过tapestry-spring模块,Tapestry可以与Spring框架协同工作,利用Spring的IoC容器管理服务和bean。 7. **测试支持**:Tapestry-test模块提供了专门的测试工具,使得开发者能够对组件进行单元...

    tapestry-bin-5.1.0.5

    4. **tapestry-ioc-LICENSE.txt**:这部分涉及Tapestry的依赖注入(IOC)框架,它是Tapestry实现组件之间解耦的关键部分。 5. **tapestry-upload-LICENSE.txt**:关于Tapestry中文件上传功能的许可信息,帮助开发者...

    tapestry-cometd:基于 CometD 的 Tapestry5 推送库

    基于库 特征: 无需编写一行 Javascript 即可创建推送应用程序 完全可配置 使用设置传入消息的... xmlns : p = " tapestry:parameter " &gt; &lt;!-- type a chat message in this form --&gt; &lt; form t :

    Tapestry4开发指南

    然而,随着时间的推移,Tapestry4展现出的独特优势逐渐显现,尤其是其通过Hivemind提供的IoC和DI(Dependency Injection)机制,使得开发者能够根据具体需求重构Tapestry4的组件,从而实现更为个性化、符合特定场景的...

    tapestry5 build web application-alexander

    《Tapestry 5:构建Web应用程序》是关于Tapestry 5框架的一本权威指南。Tapestry 5是一个强大的Java Web应用框架,由Apache软件基金会开发并维护,它致力于提供一种更高效、更优雅的方式来构建动态、交互式的Web应用...

    Tapestry5, Packt.Publishing.Tapestry.5.Building.Web.Applications.Jan.2008.RETAiL.eBOOk-sUppLeX.pdf

    ### Tapestry5:构建Web应用程序 #### 一、Tapestry5概述 Tapestry5是一种先进的、基于Java的Web开发框架,它以其强大的功能、灵活性以及易用性著称。该框架由Howard Lewis Ship创建,并由Apache软件基金会维护。...

    Tapestry+5.1+实例教程

    4. **下载Tapestry:** - 从Tapestry官方网站下载tapestry-bin-5.1.0.5.zip,并保存以备后续使用。 5. **新建Web项目:** - 在Eclipse中启动一个新的Web项目,并按照指示进行配置。 - 创建项目时选择合适的Web...

Global site tag (gtag.js) - Google Analytics