`
sbfivwsll
  • 浏览: 63449 次
  • 性别: Icon_minigender_1
  • 来自: 四川
社区版块
存档分类
最新评论

tapestry 中使用枚举类型作为组件参数的方法

 
阅读更多

转自:http://tapestry.apache.org/enum-parameter-recipe.html

 

It's not uncommon to create a component that has a bit of complex behavior that you want to be able to easily control, and an enumerated type (a Java enum) seems like the right approach.

 

Our example comes from Tapestry's Select component, which has a blankOption parameter that an enum type.

 

Let's start with the enum type itself:

 


BlankOption.java

public enum BlankOption
{
    /**
     * Always include the blank option, even if the underlying property is required.
     */
    ALWAYS,

    /**
     * Never include the blank option, even if the underlying property is optional.
     */
    NEVER,

    /**
     * The default: include the blank option if the underlying property is optional.
     */
    AUTO;
}
 

 

Next, we define the parameter:

 


Select.java (partial)

/**

* Controls whether an additional blank option is provided. The blank option precedes all other options and is never

* selected. The value for the blank option is always the empty string, the label may be the blank string; the

* label is from the blankLabel parameter (and is often also the empty string).

*/

@Parameter(value = "auto", defaultPrefix = BindingConstants.LITERAL)

private BlankOption blankOption;


Note the use of literal as the default prefix; this allows us to use the name of the option in our template, e.g. <t:select blankoption="never" .../>. Without the default prefix setting, "never" would be interpreted as a property expression (and you'd see an error when you loaded the page).

 

The final piece of the puzzle is to inform Tapestry how to convert from a string, such as "never", to a BlankOption value.

 


TapestryModule.java (partial)

  public static void contributeTypeCoercer(Configuration<CoercionTuple> configuration)
    {
       . . .
       
       add(configuration, BlankOption.class);

       . . .
    }

    private static <T extends Enum> void add(Configuration<CoercionTuple> configuration, Class<T> enumType)
    {
        configuration.add(CoercionTuple.create(String.class, enumType, StringToEnumCoercion.create(enumType)));
    }
 

 

The TypeCoercer service is ultimately responsible for converting the string to a BlankOption, but we have to tell it how, by contributing an appropriate CoercionTuple. The CoercionTuple identifies the source and target types (String and BlankOption), and an object to perform the coercion (an instance of StringToEnumCoercion, via the create() static method).

分享到:
评论

相关推荐

    tapestry4.02中封装ext的GridPanel组件

    在`GridPanel.java`中,会定义Tapestry组件的Java类,包括属性、方法和事件处理逻辑。 3. **配置模板**:编写对应的HTML/TML模板文件,如`GridPanel.tml`,在这个模板中,可以通过Tapestry的标记语言来创建...

    tapestry5 自定义组件

    例如,我们可以使用 `@Parameter` 注解来指定输入参数,或者使用 `@Event` 注解来定义组件的事件处理方法。在 `MyEmail` 组件中,我们可能需要配置一个 `send` 事件,当用户点击发送按钮时触发: ```java import ...

    tapestry官方中文文档

    在Tapestry中,大多数的编程都是声明式的,这意味着开发者可以使用XML或注解来定义页面和组件的行为,而不是编写大量的Java代码。这降低了代码的复杂性,提高了可读性和维护性。 4. **页面和组件生命周期**: ...

    Tapestry简单入门.rar_java Tapestry_tapestry

    1. **声明式编程**:在Tapestry中,组件的行为是通过属性和事件来声明的,而不是通过大量的回调方法。 2. **类型安全**:组件属性可以直接绑定到模型对象,提供了强类型和编译时的错误检查。 3. **生命周期管理**:...

    tapestry4.02中封装ext的TabPanel组件

    在Tapestry中,有时需要自定义JavaScript来处理更复杂的交互逻辑,或者与服务器进行异步通信。这个文件可能包含了与TabPanel相关的AJAX操作或DOM操作的代码。 使用这些文件,开发者可以创建一个完全自定义的...

    tapestry页面编辑组件

    在Tapestry中,这些组件不仅可以方便地呈现和管理用户输入,还可以配合各种事件处理程序,如onChange、onSubmit等,实现复杂的业务逻辑。同时,Tapestry的类型安全机制确保了服务器接收到的数据是经过验证的,减少了...

    tapestry hibernate Spring应用及组件的使用

    在IT行业中,开发高效、可维护的Web应用程序是至关重要的,而Tapestry、Hibernate和Spring框架的结合使用,能够帮助我们实现这一目标。本文将深入探讨如何在实际项目中运用这三个技术,以及它们如何协同工作,以实现...

    tapestry官方中文文档及中文字典

    3. **组件创建**:介绍Tapestry的组件模型,如何创建自定义组件,以及使用内置组件如表单、链接等。 4. **页面和组件生命周期**:解释页面和组件的生命周期方法,如构造器、初始化和销毁方法。 5. **事件处理和数据...

    Tapestry中的Table和Tree的完整教程

    在这个完整的教程中,我们将深入探讨Tapestry中的Table和Tree组件,这两种组件在数据展示和交互中扮演着重要角色。 ### Tapestry Table组件 Table组件是Tapestry中用于显示数据列表的关键组件。它允许开发者以表格...

    tapestry组件

    tapestry部分组件绑定参数的列表!

    Tapestry的组件及功能

    介绍Tapestry组件的使用和功能。内容还行,使用初学者入门。

    Tapestry5 使用教程

    它通过组件化的方法来构建网页,提供了丰富的功能,包括输入验证、本地化/国际化、状态/持久性管理、URL 构建/参数映射等。 Tapestry 的核心优势之一是它能够为不同的角色带来便利: - **终端用户**:Tapestry 在...

    Tapestry5使用文档

    此外,还介绍了 **弹出层** 的使用方法以及 **T5 组件解析过程**,帮助开发者更好地理解和应用 Tapestry5 的各种特性。通过对以上知识点的掌握,开发者能够更加熟练地使用 Tapestry5 进行 Web 应用程序的开发。

    tapestry5中文文档

    Apache Tapestry 5 是一个基于Java的Web应用开发框架,其设计目的是为了简化Web应用程序的构建,提供组件化的页面构建、输入验证、本地化、状态管理和URL映射等功能。Tapestry 5 强调易用性,不仅对终端用户友好,...

    Tapestry 4 官方文档中版本

    "Tapestry4 Users Guide" 和 "Tapestry4 Quick Start" 这两份文档,分别提供了全面的用户指南和快速入门教程,帮助开发者了解和掌握Tapestry 4的使用方法和最佳实践。 10. **社区支持**: 作为Apache项目的一部分...

    tapestry源码 api等

    通过源码,我们可以学习如何在Tapestry中配置和使用Hibernate服务。 4. **Tapestry MongoDB**: 对MongoDB数据库的支持,让开发者能够利用NoSQL数据库的优势。源码揭示了如何在Tapestry应用中集成MongoDB,进行数据...

    tapestry学习入门资料

    2. Tapestry 由“对象、方法、域”这些面像对象元素构成,但是它更关注于开发者关心的 Servlet API 的请求,回复,会话,属性,参数,URLs 等等开销。 3. Tapestry 关注的是如何联系用户的动作和这些动作所引响到的...

    Tapestry4.1.2 入门-介绍

    在Tapestry中,开发者无需关注HTTP请求的处理细节,如链接、请求流向和响应重定向等低级任务。相反,Tapestry的核心关注点在于页面、组件、事件、对象、方法和属性的管理。 Tapestry4.1.2 版本基于Servlet技术,...

    tapestry-4.0.zip

    在性能优化方面,Tapestry 4.0 使用了页面缓存和组件缓存策略,减少了服务器的负载,提升了应用的响应速度。此外,它的请求处理机制也进行了优化,使得请求的处理更加高效。 总的来说,Tapestry 4.0 是一个强大且...

    tapestry 实例

    3. **事件驱动**:Tapestry 采用事件驱动模型,用户操作可以触发组件内的事件,进而调用相应的处理方法。这种方式简化了页面与服务器间的交互逻辑。 4. **模板和元数据**:每个组件都有一个HTML模板,用于定义组件的...

Global site tag (gtag.js) - Google Analytics